![](/img/trans.png)
[英]Groupby multiple columns count size and calculate mean of another column in Pandas
[英]PANDAS groupby 2 columns then count and mean
我有一個用戶數據框,每次他們進入一個網站時,它看起來像這樣:
(如果有 x 行具有相同的星期和日期,則表示用戶在該日期的 x 時間進入了站點)。
ID | 星期 | 日期 |
---|---|---|
1個 | 2個 | 20/07/21 |
2個 | 3個 | 23/07/21 |
2個 | 3個 | 23/07/21 |
2個 | 3個 | 26/07/21 |
2個 | 4個 | 30/07/21 |
2個 | 4個 | 30/07/21 |
2個 | 4個 | 30/07/21 |
2個 | 4個 | 21 年 7 月 31 日 |
到目前為止,我已經設法做到了這一點:
ID | 星期 | 日期 | 天數 |
---|---|---|---|
1個 | 2個 | 20/07/21 | 1個 |
2個 | 3個 | 23/07/21 | 2個 |
2個 | 3個 | 26/07/21 | 1個 |
2個 | 4個 | 30/07/21 | 3個 |
2個 | 4個 | 21 年 7 月 31 日 | 1個 |
使用此代碼:
df.groupby(['ID','week','date']).agg({'date':['count']})
但我需要計算每個用戶每周使用該網站的平均時間,因此每個用戶每周都有一行。 因此,我需要的 output 如下所示:
ID | 星期 | 平均天數 |
---|---|---|
1個 | 2個 | 1個 |
2個 | 3個 | 1.5 |
2個 | 4個 | 2個 |
任何想法如何繼續?
謝謝!!
使用:
(df.groupby(['ID', 'week', 'date'], as_index=False)['date']
.agg('count')
.groupby(['ID', 'week'], as_index=False)
.agg(**{'mean days number': ('date', 'mean')})
)
Output:
ID week mean days number
0 1 2 1.0
1 2 3 1.5
2 2 4 2.0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.