当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循环,但到目前为止还无法破解它。有什么建议吗?
答案 0 :(得分:2)
您可以先使用过滤器,然后对B
列求和,例如:
df[(df['MatchN'] == x) & (i <= df['B']) & (df['B'] <= j)]['Runs'].sum()
# \_________________________ _________________________/ \___ __/\_ __/
# v v v
# filter part column sum part
所以过滤器部分是逻辑和三个条件:
df['MatchN'] == x
; i <= df['B']
;和df['B'] <= j
。我们使用&
运算符组合三个过滤器。接下来,我们使用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