如何使用pandas对与给定条件匹配的列中的值求和?

2024-05-16 21:01:01 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个这样的专栏:

a   b  
1   5   
1   7
2   3
1   3
2   5

我想总结一下b的值,例如a = 1。这会给我5 + 7 + 3 = 15

在熊猫身上怎么做?


Tags: 专栏
2条回答

也可以在不使用groupby或loc的情况下执行此操作。只需在代码中包含条件。让dataframe的名称为df。然后您可以尝试:

df[df['a']==1]['b'].sum()

或者您也可以尝试:

sum(df[df['a']==1]['b'])

另一种方法是使用python的numpy库:

import numpy as np
print(np.where(df['a']==1, df['b'],0).sum())

这里的基本思想是选择要求和的数据,然后求和。数据的选择可以用几种不同的方法来完成,其中一些方法如下所示。

布尔索引

可以说,选择值的最常用方法是使用Boolean indexing

使用此方法,可以找出列“a”等于1的位置,然后对列“b”的相应行求和。可以使用loc处理行和列的索引:

>>> df.loc[df['a'] == 1, 'b'].sum()
15

布尔索引可以扩展到其他列。例如,如果df还包含一个列“c”,并且我们希望对“b”中的行求和,其中“a”是1,“c”是2,我们将编写:

df.loc[(df['a'] == 1) & (df['c'] == 2), 'b'].sum()

查询

选择数据的另一种方法是使用^{}筛选感兴趣的行,选择列“b”,然后求和:

>>> df.query("a == 1")['b'].sum()
15

同样,该方法可以扩展以对数据进行更复杂的选择:

df.query("a == 1 and c == 2")['b'].sum()

注意,这比布尔索引方法更简洁一些。

分组

另一种方法是使用^{}根据列“a”中的值将数据帧分割为多个部分。然后,您可以对每个部分求和,并得出1加起来的值:

>>> df.groupby('a')['b'].sum()[1]
15

这种方法可能比使用布尔索引要慢,但如果要检查列a中其他值的和,则非常有用:

>>> df.groupby('a')['b'].sum()
a
1    15
2     8

相关问题 更多 >