了解熊猫grouby sum()

时间:2020-01-27 10:22:47

标签: python pandas pandas-groupby

在groupby()的情况下,我无法理解sum()的工作方式。 Official docs说它可以计算值的总和,但我看不到如何:

df = pd.DataFrame({'A': [1, 1, 2, 1, 2],
               'B': [np.nan, 2, 3, 4, 5],
               'C': [1, 2, 1, 1, 2]},
               columns=['A', 'B', 'C'])

enter image description here

我看不到它是如何计算结果的,它肯定不是对每一行都执行A + B + C。

2 个答案:

答案 0 :(得分:1)

您的示例相当糟糕,但让我解释一下。

Groupby是一种操作,它采用列的值并将所有相等的值合并在一起。现在我们需要一个操作来处​​理其他列。因为与合并程序需要知道如何处理它们。这就是运算总和。 (其他操作:均值,计数...)

在您的情况下,您在B中仅具有唯一值,因此没有2行合并在一起。因此,一个元素的总和是多少?正是元素。

l = [3]
print(sum(l)) # Output: 3

这就是您的示例中发生的事情。

这就是为什么@jezrael在评论中说您可能想df = df.groupby('A').sum()

输出为:

     B  C
A        
1  6.0  4
2  8.0  3

如您所见,我们按A列分组。第1行和第3行加在一起,第2行和第4行加在一起。

您可能正在寻找:

df.sum()

哪个输出:

A     7.0
B    14.0
C     7.0

或者@Andrea提到了这一点:

df.sum(axis=1)

输出:

0    2.0
1    5.0
2    6.0
3    6.0
4    9.0

但是Groupby是实现我想要的想法的错误方法。

答案 1 :(得分:0)

通过比较以下两个数据帧可以很好地理解这一点:-

让数据框成为

original_dataframe

df.groupby('B').sum()会得到

groupbyB

同时,做df.groupby('A').sum()会得到

groupbyA

因此,groupby()。sum()所做的是,它使用B元素,在A和C中添加相应的行元素,然后在B列中搜索该元素的重复项。如果找到,则再次添加相应的A和C值。如果找不到,则跳至B列中的下一个元素。为进一步说明,在上述示例中,首先采用B = 2.0,其中A = 1和C = 2。 B列中未重复2.0,现在移至B = 3.0,对于A = 2和C = 1,依此类推。这是groupby('B')。sum()的输出。另一方面,完成df.groupby('A')时,它首先需要A = 1。为此,相应的值为B = NaN,C =1。由于在A列中重复1,因此sumB = NaN + 2.0 + 4.0 = 6,sumC = 1 + 2 + 1 = 4。完成1则转到A =2。同样,对于A = 2,sumB = 3.0 + 5.0 = 8,sumC = 1 + 2 =3。这说明了groupby('A')完成时的输出。

对于您的问题,df.sum()将所有3列的总和设为

A   7.0
B   14.0
C   7.0

如果要按行求和,请执行df.sum(axis = 1) 这将给

0   2.0
1   5.0
2   6.0
3   6.0
4   9.0