簡體   English   中英

Pandas groupby 累計和月份

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

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