[英]Pandas groupby cumulative sum and month
我需要用每個用戶的累積總和(大約 5 或 6)按月對我的 df 進行排序。 每行是用戶的不同日志條目,因此用戶可能在同一天有多個條目。
USER DATE
1 user1 2021-04-15
4 user5 2021-04-15
5 user3 2021-04-15
6 user1 2021-04-15
14 user2 2021-04-16
... ... ...
2227 user4 2021-12-30
2228 user5 2021-12-30
2229 user3 2021-12-30
2230 user2 2021-12-30
2231 user1 2021-12-30
我想得到這樣的東西
MONTH USER CUMSUM
1 2021-04 user1 3
2 2021-04 user2 5
3 2021-04 user3 2
4 2021-04 user4 0
5 2021-04 user5 1
... ... ... ...
n 2021-12 user1 232
n+1 2021-12 user2 124
n+2 2021-12 user3 152
n+3 2021-12 user4 312
n+4 2021-12 user5 218
目標是稍后按月繪制每個用戶的累積總和。 我有一個已經在工作的代碼,但必須在 df 上進行迭代,並在 dict 上計算每個月的每個條目。 可能不是最有效的方法。 我嘗試使用 cumsum 和 groupby 但到目前為止沒有成功。
您可以使用pandas Grouper
或更常見的寫為當月的pd.Grouper
,但如果您還沒有索引,則必須設置索引。
df.set_index('DATE').groupby([pd.Grouper(freq = 'M'),'USER']).sum()
df['MONTH'] = pd.to_datetime(df['DATE'], format='%Y-%m-%d') # getting DATE to datetime
df['MONTH'] = df['MONTH'].apply(lambda x: x.strftime("%Y-%m")) # applying your format
df['count'] = 1 # adding a count column for cumsum()
df_try = df.groupby(['USER', 'MONTH']).sum().groupby(level=0).cumsum() # groupby and cumsum
這個單線怎么樣:
df.groupby([pd.Grouper(key='DATE', freq='M'), 'USER'])['USER'].count().groupby(['USER']).cumsum()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.