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

adi*_*ijo 53 python data-analysis dataframe pandas

假设我有一个这样的列:

a   b  
1   5   
1   7
2   3
1   3
2   5
Run Code Online (Sandbox Code Playgroud)

我要总结的值b,其中a = 1,例如.这会给我5 + 7 + 3 = 15.

我怎么在熊猫里这样做?

Ale*_*ley 72

对这种任务使用布尔索引是很常见的.使用此方法,您可以找到列1等于的位置loc,然后对列的相应行求和df.您可以使用query来处理索引:

>>> df.loc[df['a'] == 1, 'b'].sum()
15
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用groupby根据列中的值将数据帧拆分为多个部分a.然后,您可以对每个部分求和,并提取1加起来的值:

df.loc[(df['a'] == 1) & (df['c'] == 2), 'b'].sum()
Run Code Online (Sandbox Code Playgroud)

1方法比使用布尔索引慢得多,但如果要检查列中其他值的总和,则该方法很有用loc.

  • @LucSpan:绝对的,你可以写`df.loc [(df ['a'] == 1)&(df ['c'] == 2),'b'].sum()`来求和. (3认同)
  • 你可以写 `df['a'] = df['a'].astype(int)` 或 `df['a'] = df['a'].convert_objects(convert_numeric=True)` 来做到这一点。 (2认同)

Him*_*dar 6

您也可以在不使用 groupby 或 loc 的情况下执行此操作。只需将条件包含在代码中即可。令数据框的名称为 df。那么你可以尝试:

df[df['a']==1]['b'].sum()
Run Code Online (Sandbox Code Playgroud)

或者你也可以尝试:

sum(df[df['a']==1]['b'])
Run Code Online (Sandbox Code Playgroud)

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

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