【问题标题】:Pandas: getting rid of the multiindexPandas:摆脱多索引
【发布时间】:2020-09-20 02:04:30
【问题描述】:

在对数据帧进行分组和计数后,我尝试像这样删除多索引:

df = df[['CID','FE', 'FID']].groupby(by=['CID','FE']).count()
              .unstack().reset_index()

打印列 (df.colums) 表明它仍然是 MultiIndex

MultiIndex(levels=[['FID', 'CID'], [...]]

我无法通过df['CID'] 访问CID 列。

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    如果有必要,我认为您需要将MultiIndex 转换为Index

    df.columns = df.columns.map(''.join)
    

    或者如果需要删除级别使用droplevel:

    df.columns = df.columns.droplevel(0)
    

    如果需要访问值可以使用xs:

    df = df.xs('CID', axis=1, level=1)
    

    您也可以查看:

    What is the difference between size and count in pandas?

    编辑:

    对于删除 MultiIndex 是 ['FID'] 选择的另一个解决方案。

    df = df.groupby(by=['CID','FE'])['FID'].count().unstack().reset_index()
    

    示例(还添加了rename_axis 以获得更好的输出):

    df = pd.DataFrame({'CID':[2,2,3],
                       'FE':[5,5,6],
                       'FID':[1,7,9]})
    
    print (df)
       CID  FE  FID
    0    2   5    1
    1    2   5    7
    2    3   6    9
    
    df = df.groupby(by=['CID','FE'])['FID']
           .count()
           .unstack()
           .reset_index()
           .rename_axis(None, axis=1)
    
    print (df)    
       CID    5    6
    0    2  2.0  NaN
    1    3  NaN  1.0
    

    【讨论】:

    • 以下对我很有效:df.columns = df.columns.map(lambda x: x[1])df = df.reset_index() 谢谢!
    【解决方案2】:

    这应该摆脱 CID 的 MultiIndex 并允许您通过 df['CID'] 访问它

    df = df.rename(columns={('CID',''):'CID'})
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-12
      • 2019-05-05
      • 2015-05-11
      • 2018-10-22
      • 1970-01-01
      • 1970-01-01
      • 2013-02-22
      • 2019-07-26
      相关资源
      最近更新 更多