将索引的pandas矩阵转换为平面数据帧

时间:2017-04-03 03:21:13

标签: pandas dataframe indexing group-by

鉴于数据框:

df = pd.DataFrame([['foo', 123, 4, 5, 0, 1], ['foo', 123, 4, 0, 9, 1], ['bar', 33, 0, 0, 3, 5]], columns=list('ABCDEF'))

[OUT]:

    A   B   C   D   E   F
0   foo 123 4   5   0   1
1   foo 123 4   0   9   1
2   bar 33  0   0   3   5

目标是将某些列('C','D','E',F')用其他列('A'和'B')作为键来实现:

    A   B   C   D   E   F
0   foo 123 8   5   9   2
2   bar 33  0   0   3   5

我试过了:

df.groupby(['A', 'B']).sum()

[OUT]:

        C   D   E   F
A   B               
bar 33  0   0   3   5
foo 123 8   5   9   2

如何将其更改回非索引矩阵?即。

    A   B   C   D   E   F
0   foo 123 8   5   9   2
2   bar 33  0   0   3   5

2 个答案:

答案 0 :(得分:2)

您需要添加.reset_index()

df.groupby(['A','B']).sum().reset_index()

    A   B   C   D   E   F
0   bar 33  0   0   3   5
1   foo 123 8   5   9   2

df.set_index(['A','B']).sum(level=[0,1]).reset_index()

    A   B   C   D   E   F
0   bar 33  0   0   3   5
1   foo 123 8   5   9   2

答案 1 :(得分:2)

您可以使用参数as_index=False返回df

df1 = df.groupby(['A', 'B'], as_index=False).sum()
print (df1)
     A    B  C  D  E  F
0  bar   33  0  0  3  5
1  foo  123  8  5  9  2