如何使用布尔变量根据 'if' 条件获取累计和
How do I get cumulative sum based on 'if' condition using a Boolean variable
我有以下数据框:
vote_prprtn uniform_votesh p_by_q ln_p_by_q p_ln_p_by_q match
0.0116 0.009367 1.238434 0.213848 0.002481 False
0.0100 0.009367 1.067616 0.065428 0.000654 True
0.0065 0.009367 0.693950 -0.365355 -0.002375 True
0.0072 0.006000 1.200000 0.182321 0.001313 False
0.0048 0.006000 0.800000 -0.223143 -0.001071 True
我想创建另一列,当 match = False 时,其行值为 p_ln_p_by_q 并在 match 为 True 时逐行计算累加和。这一直持续到下一个 False 值。我的最终数据框应如下所示:
vote_prprtn uniform_votesh p_by_q ln_p_by_q p_ln_p_by_q match final_val
0.0116 0.009367 1.238434 0.213848 0.002481 False 0.002481
0.0100 0.009367 1.067616 0.065428 0.000654 True 0.003135
0.0065 0.009367 0.693950 -0.365355 -0.002375 True 0.00076
0.0072 0.006000 1.200000 0.182321 0.001313 False 0.001313
0.0048 0.006000 0.800000 -0.223143 -0.001071 True 0.000242
在这方面的任何帮助都会真正让我理解 excel 和 pandas 之间的相似之处。
我不知道你的数据框是怎么做的,但你可以试试这种风格:
sum = 0
for row in frame.rows:
if(row.match == False):
sum = 0
sum += row.p_ln_p_by_q
row.final_val = sum
(注意调整你在行中 read/write 的方式,这只是一个基于 Python 的伪代码)。
groupby
using a group defined by each time match==False
then do the cumsum
每组。
df['final_val'] = df.groupby((~df.match).cumsum())['p_ln_p_by_q'].cumsum()
df['final_val']
# 0 0.002481
# 1 0.003135
# 2 0.000760
# 3 0.001313
# 4 0.000242
我有以下数据框:
vote_prprtn uniform_votesh p_by_q ln_p_by_q p_ln_p_by_q match
0.0116 0.009367 1.238434 0.213848 0.002481 False
0.0100 0.009367 1.067616 0.065428 0.000654 True
0.0065 0.009367 0.693950 -0.365355 -0.002375 True
0.0072 0.006000 1.200000 0.182321 0.001313 False
0.0048 0.006000 0.800000 -0.223143 -0.001071 True
我想创建另一列,当 match = False 时,其行值为 p_ln_p_by_q 并在 match 为 True 时逐行计算累加和。这一直持续到下一个 False 值。我的最终数据框应如下所示:
vote_prprtn uniform_votesh p_by_q ln_p_by_q p_ln_p_by_q match final_val
0.0116 0.009367 1.238434 0.213848 0.002481 False 0.002481
0.0100 0.009367 1.067616 0.065428 0.000654 True 0.003135
0.0065 0.009367 0.693950 -0.365355 -0.002375 True 0.00076
0.0072 0.006000 1.200000 0.182321 0.001313 False 0.001313
0.0048 0.006000 0.800000 -0.223143 -0.001071 True 0.000242
在这方面的任何帮助都会真正让我理解 excel 和 pandas 之间的相似之处。
我不知道你的数据框是怎么做的,但你可以试试这种风格:
sum = 0
for row in frame.rows:
if(row.match == False):
sum = 0
sum += row.p_ln_p_by_q
row.final_val = sum
(注意调整你在行中 read/write 的方式,这只是一个基于 Python 的伪代码)。
groupby
using a group defined by each time match==False
then do the cumsum
每组。
df['final_val'] = df.groupby((~df.match).cumsum())['p_ln_p_by_q'].cumsum()
df['final_val']
# 0 0.002481
# 1 0.003135
# 2 0.000760
# 3 0.001313
# 4 0.000242