熊猫:摆脱多指数

时间:2017-05-17 11:37:27

标签: python pandas dataframe

分组和计数后,我试图删除这样的多索引:

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

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

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

我无法通过CID

访问专栏df['CID']

2 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:0)

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

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