将agroupby
应用于DataFrame时,结果分组值的总和与采用原始DataFrame的列总和时的总和不同。这怎么可能?我无法显示我的完整数据,因为它很敏感,而且更烦人的是,我似乎无法重现问题。下面的示例对此进行了说明。
说我有这个数据框df2
:
A B C D
0 One 1 3 2
1 Two NaN 6 4
2 Three 3 NaN 8
3 One 4 17 NaN
4 Two 7 NaN 2
5 Three 12 8 15
汇总后返回预期结果:
`df2.sum()`
A OneTwoThreeOneTwoThree
B 27
C 34
D 31
dtype: object
然后使用这个groupby
:
df3 = df2.groupby(['A'])[['B', 'C', 'D']].sum()
返回此:
B C D
A
One 5 20 2
Three 15 8 23
Two 7 6 6
求和返回与求和原始列相同的值:
df3.sum()
B 27
C 34
D 31
dtype: float64
但是,在我的实际数据中,原始值为:
13496 non-null float64
11421 non-null float64
10890 non-null float64
10714 non-null float64
但是,在与groupby
上述相同的使用之后.sum()
,分组的行总计为:
13021
11071
10568
10408
我在这里错过了一些熊猫警告或陷阱吗?价值如何丢失?显然,这不是一个可以回答的直接编程问题,而是一个熊猫的“内部工作原理”问题。我没有在熊猫文档中看到任何关于此的内容,也没有关于此的任何疑问。
您NaN
在A列中有任何值吗?这可能会产生您正在描述的行为,因为NaN
值在分组时会被丢弃。考虑下面的DataFrame:
A B C D
0 x 1.0 NaN 100.0
1 x 2.0 21.0 105.0
2 y NaN 22.0 110.0
3 NaN 4.0 23.0 115.0
4 z 5.0 24.0 120.0
5 z 6.0 25.0 NaN
然后df.sum()
产生:
B 18.0
C 115.0
D 550.0
dtype: float64
但df.groupby('A')['B', 'C', 'D'].sum().sum()
产生:
B 14.0
C 92.0
D 435.0
dtype: float64
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句