簡體   English   中英

pandas groupby on date 提供滾動數據切片

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM