基于数据帧中的值求和

时间:2017-06-17 18:07:22

标签: python python-3.x pandas

当MatchN为x时,我需要对列“运行”求和,B在i和j之间。

MatchN  I   B   Runs
1000887 1   0.1 1
1000887 1   0.2 3
1000887 1   0.3 0
1000887 1   0.4 2
1000887 1   0.5 1

我尝试使用for循环,但到目前为止还无法破解它。有什么建议吗?

2 个答案:

答案 0 :(得分:2)

您可以先使用过滤器,然后对B列求和,例如:

df[(df['MatchN'] == x) & (i <= df['B']) & (df['B'] <= j)]['Runs'].sum()
#  \_________________________ _________________________/ \___ __/\_ __/
#                            v                               v     v
#                        filter part                     column sum part

所以过滤器部分是逻辑和三个条件:

  1. df['MatchN'] == x;
  2. i <= df['B'];和
  3. df['B'] <= j
  4. 我们使用&运算符组合三个过滤器。接下来,我们使用df[<filter-condition>]选择这些行(我们之前讨论的过滤器为<filter-condition>)。

    接下来,我们选择已过滤行的Runs列,然后最后计算该列的.sum()

答案 1 :(得分:2)

您可以使用query

x = '1000887'
i = 0.2
j = 0.4
df.query('MatchN == @x and @i <= B <= @j')['Runs'].sum()

输出:

5