Есть ли способ сложить значение на основе флага и добавить значение в другие строки подряд флага без итерации в pandas - PullRequest
0 голосов
/ 13 февраля 2020

Я пытаюсь собрать «значение» для «флага» == 2 и добавить эти кумулятивные значения в последовательные строки «флага» == 1 и удалить флаг 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) 

Есть ли способ достичь этого без итерации? Спасибо.

1 Ответ

0 голосов
/ 13 февраля 2020

Попробуйте:

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
...