将 a 应用于groupbyDataFrame 时,所得分组值的总和与获取原始 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
Run Code Online (Sandbox Code Playgroud)
总结一下,它会按预期返回:
`df2.sum()`
A OneTwoThreeOneTwoThree
B 27
C 34
D 31
dtype: object
Run Code Online (Sandbox Code Playgroud)
然后使用这个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
Run Code Online (Sandbox Code Playgroud)
求和返回与求和原始列相同的值:
df3.sum()
B 27
C 34
D 31
dtype: float64
Run Code Online (Sandbox Code Playgroud)
然而,在我的实际数据中,原始值为:
13496 non-null float64
11421 non-null float64
10890 non-null float64
10714 non-null float64
Run Code Online (Sandbox Code Playgroud)
然而,在groupby使用与上面相同的操作之后.sum(),分组的行总和为:
13021
11071
10568
10408
我在这里缺少一些熊猫警告或陷阱吗?价值观是如何流失的?这显然不是一个可以回答的直接编程问题,而更多的是 pandas 的“内部运作”问题。我在 pandas 文档中没有看到任何关于此的内容,也没有任何关于它的问题。
NaNA 列中有任何值吗?这可能会产生您所描述的行为,因为NaN值在分组时会被丢弃。考虑下面的数据框:
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
Run Code Online (Sandbox Code Playgroud)
然后df.sum()产生:
B 18.0
C 115.0
D 550.0
dtype: float64
Run Code Online (Sandbox Code Playgroud)
但df.groupby('A')['B', 'C', 'D'].sum().sum()产生:
B 14.0
C 92.0
D 435.0
dtype: float64
Run Code Online (Sandbox Code Playgroud)