我有一個用戶日志以及它記錄在哪個類別中。用戶可以登錄多個類別。我想確定哪些用戶登錄了多個類別。日志有點長,因此最好將其排序在大多數類別中已登錄的用戶的頂部。
| 用戶 | 類別 |
|---|---|
| 1 | 一個 |
| 1 | 乙 |
| 2 | 一個 |
| 3 | 一個 |
| 3 | 乙 |
目前使用 group_by 我只能顯示計數,但不能顯示類別的名稱。大多數現有問題通常是反過來問的(例如,一個類別中有多少用戶)。我想做這樣的事情:
| 用戶 | 類別 | 數數 |
|---|---|---|
| 1 | 甲、乙 | 2 |
| 2 | 一個 | 1 |
| 3 | 甲、乙 | 2 |
為了使它更復雜,我想確定相同但我還想知道用戶是否在特定時間視窗(例如 5 分鐘)內登錄多個類別:
| 時間戳 | 用戶 | 類別 |
|---|---|---|
| 2021-12-12 13:00:00 | 1 | 一個 |
| 2021-12-12 13:06:00 | 1 | 乙 |
| 2021-12-12 13:08:00 | 2 | 一個 |
| 2021-12-12 13:09:00 | 1 | 乙 |
| 2021-12-12 13:14:00 | 3 | 一個 |
| 2021-12-12 13:15:00 | 3 | 乙 |
| 2021-12-12 13:15:00 | 3 | 一個 |
| 2021-12-12 13:15:00 | 1 | 乙 |
我想要類似下面的內容(但對不同的顯示方法開放),因此每個用戶的類別在每個時間視窗(在本例中為 5 分鐘)有點分類:
| 時間戳 | 用戶 | 類別 | 數數 |
|---|---|---|---|
| 2021-12-12 13:00:00 | 1 | 一個 | 1 |
| 2021-12-12 13:05:00 | 1 | 乙 | 1 |
| 2021-12-12 13:05:00 | 2 | 一個 | 1 |
| 2021-12-12 13:05:00 | 1 | 乙 | 1 |
| 2021-12-12 13:10:00 | 3 | 一個 | 1 |
| 2021-12-12 13:15:00 | 3 | 乙、甲 | 2 |
| 2021-12-12 13:15:00 | 1 | 乙 | 1 |
我嘗試了各種組合 .resample、groub_by 和 .cumsum 的東西,但沒有任何運氣。我希望這些例子有意義。
uj5u.com熱心網友回復:
GroupBy.agg按列使用user:
df1 = (df.groupby('user', as_index=False)
.agg(categories=('category', ','.join), counts=('category', 'size')))
print (df1)
user categories counts
0 1 A,B 2
1 2 A 1
2 3 A,B 2
對于第二個我的輸出是不同的-使用Grouper有freq='5min':
df2 = (df.groupby(['user', pd.Grouper(freq='5min', key='timestamp')])
.agg(categories=('category', ','.join), counts=('category', 'size'))
.reset_index()
.sort_values('timestamp', ignore_index=True))
print (df2)
user timestamp categories counts
0 1 2021-12-12 13:00:00 A 1
1 1 2021-12-12 13:05:00 B,B 2
2 2 2021-12-12 13:05:00 A 1
3 3 2021-12-12 13:10:00 A 1
4 1 2021-12-12 13:15:00 B 1
5 3 2021-12-12 13:15:00 B,A 2
編輯:
df3 = (df.groupby(['user', pd.Grouper(freq='5min', key='timestamp')])
.agg(categories=('category', lambda x: ','.join(set(x))),
counts=('category', 'nunique'))
.reset_index()
.sort_values('timestamp', ignore_index=True))
print (df3)
user timestamp categories counts
0 1 2021-12-12 13:00:00 A 1
1 1 2021-12-12 13:05:00 B 1
2 2 2021-12-12 13:05:00 A 1
3 3 2021-12-12 13:10:00 A 1
4 1 2021-12-12 13:15:00 B 1
5 3 2021-12-12 13:15:00 B,A 2
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/383193.html
