Поскольку в приведенных выше данных нет нужного столбца, который можно использовать для создания групп, нам нужно создать один:
df['grp_attr'] = df['supply'].clip(upper=1)
df['grp_attr'] = df[df['grp_attr'] != 0]['grp_attr'].cumsum()
df['grp_attr'] = df['grp_attr'].bfill().fillna(0).astype(int)
df выглядит так, как только вы создаете grp_attr
:
item Date supply demand grp_attr
0 A 2018-01-01 0 10 1
1 A 2018-01-02 0 15 1
2 A 2018-01-03 100 30 1
3 A 2018-01-04 0 10 2
4 A 2018-01-05 0 40 2
5 A 2018-01-06 50 50 2
6 A 2018-01-07 0 10 3
7 B 2018-01-01 0 20 3
8 B 2018-01-02 0 30 3
9 B 2018-01-03 20 60 3
10 B 2018-01-04 0 20 4
11 B 2018-01-05 100 10 4
12 B 2018-01-06 0 20 0
13 B 2018-01-07 0 30 0`
Теперь мы можем группировать, используя grp_attr
:
df['new_supply'] = df.groupby('grp_attr')['demand'].cumsum()
df.loc[df['supply'] == 0, 'new_supply'] = 0
Когда вы закончите свои операции, теперь вы можете удалить столбцы grp_attr
из вашего фрейма данных.
df.drop(columns=['grp_attr'], inplace=True)