Điều này nên làm điều đó, cần groupby()
hai lần:
df.groupby(['name', 'day']).sum() \
.groupby(level=0).cumsum().reset_index()
Giải trình:
print(df)
name day no
0 Jack Monday 10
1 Jack Tuesday 20
2 Jack Tuesday 10
3 Jack Wednesday 50
4 Jill Monday 40
5 Jill Wednesday 110
print( df.groupby(['name', 'day']).sum() )
no
name day
Jack Monday 10
Tuesday 30
Wednesday 50
Jill Monday 40
Wednesday 110
print( df.groupby(['name', 'day']).sum() \
.groupby(level=0).cumsum() )
no
name day
Jack Monday 10
Tuesday 40
Wednesday 90
Jill Monday 40
Wednesday 150
Khung dữ liệu thu được từ tổng đầu tiên được lập chỉ mục theo 'name'
và theo 'day'
. Bạn có thể thấy nó bằng cách in
df.groupby(['name', 'day']).sum().index
Khi tính toán tổng tích lũy, bạn muốn làm như vậy bằng cách 'name'
, tương ứng với chỉ số đầu tiên (mức 0).
Cuối cùng, sử dụng reset_index
để lặp lại các tên.
df.groupby(['name', 'day']).sum().groupby(level=0).cumsum().reset_index()
name day no
0 Jack Monday 10
1 Jack Tuesday 40
2 Jack Wednesday 90
3 Jill Monday 40
4 Jill Wednesday 150