熊猫:摆脱多指数

Sci*_*tas 7 python dataframe pandas

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

df = df[['CID','FE', 'FID']].groupby(by=['CID','FE']).count()
              .unstack().reset_index()
Run Code Online (Sandbox Code Playgroud)

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

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

我不能访问列CID通过df['CID']

jez*_*ael 13

我认为你需要,如果有必要转换MultiIndexIndex:

df.columns = df.columns.map(''.join)
Run Code Online (Sandbox Code Playgroud)

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

df.columns = df.columns.droplevel(0)
Run Code Online (Sandbox Code Playgroud)

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

df = df.xs('CID', axis=1, level=1)
Run Code Online (Sandbox Code Playgroud)

你也可以检查:

大熊猫的大小和数量有什么区别?

编辑:

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

df = df.groupby(by=['CID','FE'])['FID'].count().unstack().reset_index()
Run Code Online (Sandbox Code Playgroud)

样品(也添加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
Run Code Online (Sandbox Code Playgroud)

  • 以下对我来说很有效:``df.columns = df.columns.map(lambda x:x [1])````df = df.reset_index()``谢谢! (2认同)