gpt4 book ai didi

python - MultiIndex DataFrame 的 Pandas 列名称 - 奇怪的行为

转载 作者:行者123 更新时间:2023-11-30 22:35:36 25 4
gpt4 key购买 nike

我通过 MultiIndex dataFrames.columns 观察到一些奇怪的 pandas 行为

构建多索引数据框:

a=[0,.25, .5, .75]
b=[1, 2, 3, 4]
c=[5, 6, 7, 8]
d=[1, 2, 3, 5]
df=pd.DataFrame(data={('a','a'):a, ('b', 'b'):b, ('c', 'c'):c, ('d', 'd'):d})

生成此数据帧

      a  b  c  d
a b c d
0 0.00 1 5 1
1 0.25 2 6 2
2 0.50 3 7 3
3 0.75 4 8 5

使用原始数据帧的子集创建新变量

df1=df.copy().loc[:,[('a', 'a'), ('b', 'b')]]

产生预期的效果:

      a  b
a b
0 0.00 1
1 0.25 2
2 0.50 3

但是访问这个新数据帧的列名称会产生一些意外的输出:

print df1.columns

MultiIndex(levels=[[u'a', u'b', u'c', u'd'], [u'a', u'b', u'c', u'd']],
labels=[[0, 1], [0, 1]])

所以 ('b', 'b') 和 ('c', 'c') 仍然包含在内。

相反

print df1.columns.tolist()

返回结果如预期:

[('a', 'a'), ('b', 'b')]

谁能解释一下我这种行为的原因吗?

最佳答案

我认为你需要MultiIndex.remove_unused_levels 0.20.0版本有什么新功能。

Docs .

print (df1.columns)
MultiIndex(levels=[['a', 'b', 'c', 'd'], ['a', 'b', 'c', 'd']],
labels=[[0, 1], [0, 1]])

print (df1.columns.remove_unused_levels())
MultiIndex(levels=[['a', 'b'], ['a', 'b']],
labels=[[0, 1], [0, 1]])

关于python - MultiIndex DataFrame 的 Pandas 列名称 - 奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44521007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com