[英]pandas groupby on date to give rolling data slices
我有運動數據,例如一個跑步組,其距離值與跑步日期和跑步者姓名相關,如下所示:
import pandas as pd
df=pd.DataFrame({'name': 'Jack Jill Bob Bella Norm Nella Jack Jill Bob Bella Norm Nella Jack Jill Bob Bella Norm Nella'.split(),
'date': '05-04-2021 05-04-2021 05-04-2021 06-04-2021 05-04-2021 06-04-2021 06-04-2021 08-04-2021 11-04-2021 08-04-2021 11-04-2021 08-04-2021 11-04-2021 11-04-2021 15-04-2022 15-04-2022 18-04-2022 19-04-2022'.split(),
'km': [5.85, 5.18, 13.58, 14.45, 14.58, 11.14, 8.85, 10.77, 12.54, 7.09, 7.69, 11.64, 9.82, 11.20, 10.33, 11.31, 14.66, 12.56]})
df['date']=pd.to_datetime(df['date'], infer_datetime_format=True)
我想對日期進行分組和過濾,以提供滾動、放大的數據片段以進行聚合。 我可以使用循環並對每個唯一日期進行過濾來執行此操作,這提供了一系列求和的公里值,其中唯一日期隨后作為單獨的列添加。 此代碼提供了我所追求的數據類型和格式。
for d in df.date.unique():
rolling=df[df.date <= d].groupby('name').sum()
rolling['date']=d
我想使用 .groupby() 來完成,因為我真正想做的事情有更多的數據和復雜性。 很高興被引導到我搜索后沒有找到的預先存在的答案......
預期的輸出尚不清楚,但假設您想要每個日期的每個名稱的累積公里數,您可以使用:
out = (df
.groupby(['name', 'date']).sum()
.groupby(level='name').cumsum()
.reset_index()
)
輸出:
name date km
0 Bella 2021-06-04 14.45
1 Bella 2021-08-04 21.54
2 Bella 2022-04-15 32.85
3 Bob 2021-05-04 13.58
4 Bob 2021-11-04 26.12
5 Bob 2022-04-15 36.45
6 Jack 2021-05-04 5.85
7 Jack 2021-06-04 14.70
8 Jack 2021-11-04 24.52
9 Jill 2021-05-04 5.18
10 Jill 2021-08-04 15.95
11 Jill 2021-11-04 27.15
12 Nella 2021-06-04 11.14
13 Nella 2021-08-04 22.78
14 Nella 2022-04-19 35.34
15 Norm 2021-05-04 14.58
16 Norm 2021-11-04 22.27
17 Norm 2022-04-18 36.93
上面的輸出可以方便地視為使用pivot
的 2D 表:
out2 = (df
.groupby(['name', 'date']).sum()
.groupby(level='name').cumsum()
.reset_index()
.pivot(index='date', columns='name', values='km')
)
輸出:
name Bella Bob Jack Jill Nella Norm
date
2021-05-04 NaN 13.58 5.85 5.18 NaN 14.58
2021-06-04 14.45 NaN 14.70 NaN 11.14 NaN
2021-08-04 21.54 NaN NaN 15.95 22.78 NaN
2021-11-04 NaN 26.12 24.52 27.15 NaN 22.27
2022-04-15 32.85 36.45 NaN NaN NaN NaN
2022-04-18 NaN NaN NaN NaN NaN 36.93
2022-04-19 NaN NaN NaN NaN 35.34 NaN
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.