pandas groupby 多列给出了奇怪的索引行为[重复]

Posted

技术标签:

【中文标题】pandas groupby 多列给出了奇怪的索引行为[重复]【英文标题】:pandas groupby multiple columns gives weird index behavior [duplicate] 【发布时间】:2019-11-11 05:31:29 【问题描述】:

我有如下数据,有 7 列。我想合并第 1-6 列中具有相同值的所有行,并对相应的第 7 列数据求和。

0.1  0.2  0.3  0.1  0.2  0.3  0.001
0.1  0.2  0.3  0.1  0.2  0.3  0.002
0.9  0.9  0.9  0.1  0.1  0.1  0.002
0.9  0.9  0.9  0.8  0.8  0.8  0.1 
0.9  0.9  0.9  0.8  0.8  0.8  0.2 
0.1  0.2  0.3  0.1  0.2  0.3  0.001
0.1  0.2  0.3  0.1  0.1  0.1  0.002
0.9  0.9  0.9  0.1  0.1  0.1  0.002

我试过这段代码:

import pandas as pd

df1 = pd.read_csv('test-data',sep='\s+',header=None,engine='python')
key1_sum = df1.groupby([0,1,2,3,4,5]).sum()

print(key1_sum)

我希望得到这个输出:

0.1 0.2 0.3 0.1 0.1 0.1  0.002
0.1 0.2 0.3 0.1 0.2 0.3  0.004
0.9 0.9 0.9 0.1 0.1 0.1  0.004
0.9 0.9 0.9 0.8 0.8 0.8  0.300

...但我实际上得到了这个输出:

                             6
0   1   2   3   4   5         
0.1 0.2 0.3 0.1 0.1 0.1  0.002
                0.2 0.3  0.004
0.9 0.9 0.9 0.1 0.1 0.1  0.004
            0.8 0.8 0.8  0.300

所以我只想不输出头部, 并完成相应列中的元素。

你能给我一些建议吗?

【问题讨论】:

pandas groupby() 默认为as_index=True, group_keys=True。因此,如果您按多列分组,该默认设置将为您提供不需要的 MultiIndex。设置as_index=False 以获得“SQL 风格”的分组输出(没有时髦的行索引)。 【参考方案1】:

当我们尝试groupby 是我们不希望groupby 键为index 时,我们可以传递给as_index=False

key1_sum = df1.groupby([0,1,2,3,4,5],as_index=False).sum()

【讨论】:

获得相同结果的另一种方法是key1_sum = df1.groupby([0, 1, 2, 3, 4, 5]).sum().reset_index()【参考方案2】:

pandas groupby() 默认有as_index=True, group_keys=True:

因此,如果您按多列分组,默认会为您提供(通常不需要的)MultiIndex 设置as_index=False 以获得“SQL 风格”的分组输出(没有时髦的行索引)

【讨论】:

以上是关于pandas groupby 多列给出了奇怪的索引行为[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Python Pandas groupby 并沿多列排序

Pandas Groupby 独特的多列

使用多列的 Pandas groupby 函数

pandas groupby 聚合具有多列的自定义函数

pandas pivot 或 groupby 多列和控制列

t 测试 groupby pandas 之后的多列