熊猫groupby .sum如何返回错误的值?

RDJ

将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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章