【问题标题】:Pandas Column Names of MultiIndex DataFrame - strange behaviourMultiIndex DataFrame 的 Pandas 列名称 - 奇怪的行为
【发布时间】:2017-11-15 04:52:24
【问题描述】:

我在 MultiIndex dataFrames.columns 中观察到了一些奇怪的 pandas 行为

构造一个MultiIndex数据框:

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')]

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

【问题讨论】:

    标签: python pandas multi-index


    【解决方案1】:

    我认为您需要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]])
    

    【讨论】:

      猜你喜欢
      • 2018-11-25
      • 2013-03-22
      • 2016-11-06
      • 2019-08-06
      • 2019-01-26
      • 2019-10-28
      • 2021-06-28
      • 2013-02-27
      • 2019-02-08
      相关资源
      最近更新 更多