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

时间:2015-01-30 12:48:32

标签: python pandas dataframe data-analysis

假设我有一个这样的列:

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

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

我如何在熊猫中这样做?

2 个答案:

答案 0 :(得分:59)

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

布尔索引

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

使用此方法,您可以找到列' a'等于1,然后将列'&b;#39;的相应行相加。您可以使用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()

查询

选择数据的另一种方法是使用query过滤您感兴趣的行,选择列' b'然后总结:

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

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

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

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

GROUPBY

另一种方法是使用groupby根据列' a'中的值将DataFrame拆分为多个部分。然后,您可以对每个部分求和,并将1加起来的值拉出:

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

此方法可能比使用布尔索引更慢,但如果要检查列a中其他值的总和,则此方法很有用:

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

答案 1 :(得分:0)

您也可以不使用groupby或loc来执行此操作。通过简单地将条件包括在代码中。令数据框的名称为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())