有没有一种方法可以基于标志累加值并将该值添加到其他标志连续行中,而无需在熊猫中进行迭代

问题描述 投票:0回答:1

我正在尝试将'flag'== 2的'value'累加,并将这些累积值添加到'flag'== 1的连续行中,并删除flag 2行。

输入

Index_Date   flag  value  
 ========================
 2020-01-31     1   10   
 2020-02-01     2    5   
 2020-02-02     1   10   
 2020-02-03     2    5  
 2020-03-04     1   20  

所需的输出

Index_Date   flag  value  
========================
2020-01-31     1   10   
2020-02-02     1   15  
2020-03-04     1   30  

通过迭代获得上述结果。

import pandas as pd

df = df.sort_values(by=['Index_Date'])

adjustments = 0
for index, row in df.iterrows():    
    if row['flag'] == 2:
        adjustments += row['value']
    else:
        row['value'] += adjustments

df.drop(df[df['flag'] == 2].index, inplace = True) 

是否有一种无需迭代即可实现的方法?谢谢。

python pandas cumsum
1个回答
0
投票

尝试:

df['value'] += np.where(df['flag'] == 2, df['value'], 0).cumsum()
df = df[df['flag']==1]

输出:

   Index_Date  flag  value
0  2020-01-31     1     10
2  2020-02-02     1     15
4  2020-03-04     1     30
© www.soinside.com 2019 - 2024. All rights reserved.