有没有一种方法可以根据标志累加值,并将该值添加到其他标志连续行中,而无需在Pandas中迭代

7eumitmz  于 2023-03-06  发布在  其他
关注(0)|答案(2)|浏览(99)

我正在尝试对"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)

有没有一种方法可以不用迭代就实现这个目标?谢谢。

xxls0lw8

xxls0lw81#

试试看:

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
hi3rlvi2

hi3rlvi22#

def function1(dd:pd.DataFrame):
    return dd.tail(1).assign(value=dd.value.sum())

col1=df1.flag.shift().eq(1).cumsum()
df1.groupby(col1,group_keys=False).apply(function1)

输出:

Index_Date  flag  value
0  2020-01-31     1     10
2  2020-02-02     1     15
4  2020-03-04     1     30

相关问题