将索引熊猫矩阵转换为平面数据框

Posted

技术标签:

【中文标题】将索引熊猫矩阵转换为平面数据框【英文标题】:Convert an indexed pandas matrix to a flat dataframe 【发布时间】:2017-08-27 19:31:13 【问题描述】:

给定数据框:

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

[出]:

    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

目标是使用其他列('A'和'B')作为键来对某些列('C'、'D'、'E'、F')求和以实现:

    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()

[出]:

        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

【问题讨论】:

【参考方案1】:

您需要添加.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

【讨论】:

【参考方案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

【讨论】:

以上是关于将索引熊猫矩阵转换为平面数据框的主要内容,如果未能解决你的问题,请参考以下文章

我如何将平面数据框转换为 spark(scala 或 java)中的嵌套 json

如何将多索引列转换为熊猫数据框的单索引列?

将熊猫数据框转换为numpy数组[重复]

ValueError 将多索引熊猫数据框转换为 Excel

numpy 矩阵到熊猫系列

熊猫 groupby 没有将按列分组转换为索引