在groupby之后,如何展平列标题?

sam*_*and 21 python dataframe pandas

我试图在一个Id列上加入多个pandas数据帧,但是当我尝试合并时,我收到警告:

KeyError:'Id'.

这可能是因为我的数据帧有一个groupby声明产生的偏移列,但我很可能是错的.无论哪种方式,我都无法弄清楚如何"取消堆叠"我的数据帧列标题.这个问题的答案似乎都没有效果.

我的groupby代码:

step1 = pd.DataFrame(step3.groupby(['Id', 'interestingtabsplittest2__grp'])['applications'].sum())
step1.sort('applications', ascending=False).head(3)
Run Code Online (Sandbox Code Playgroud)

返回:

偏移标题

如何将这些偏移标题放到顶层?

And*_*den 39

你在找.reset_index().

In [11]: df = pd.DataFrame([[2, 3], [5, 6]], pd.Index([1, 4], name="A"), columns=["B", "C"])

In [12]: df
Out[12]:
   B  C
A
1  2  3
4  5  6

In [13]: df.reset_index()
Out[13]:
   A  B  C
0  1  2  3
1  4  5  6
Run Code Online (Sandbox Code Playgroud)

注意:您可以as_index=False在执行groupby时使用此步骤来避免此步骤.

step1 = step3.groupby(['Id', 'interestingtabsplittest2__grp'], as_index=False)['applications'].sum()
Run Code Online (Sandbox Code Playgroud)

  • 如果在组末尾实现了agg功能。列组无法由as_index展平。我从此[link](/sf/answers/3540032821/)找到了答案。希望它对像我这样的人有所帮助。 (6认同)

Sha*_* RC 8

如果您使用多个聚合.agg()或按多列分组,则接受的答案不起作用

您可以改为删除最高级别,然后重置索引。

df.droplevel(axis=1, level=0).reset_index()
Run Code Online (Sandbox Code Playgroud)

在这里,我只降低了一个级别,但您也可以传递一个数组:

df.droplevel(axis=1, level=[0,1]).reset_index()
Run Code Online (Sandbox Code Playgroud)