我的資料框看起來如下
user action created_at
user1 A 2021-12-15 11:58:53.217258
user1 A 2021-12-15 11:50:27.864876
user1 B 2021-12-15 14:23:27.864876
user1 A 2021-12-15 14:23:27.864876
user3 C 2021-12-15 12:48:09.044315
user3 D 2021-12-15 12:48:09.044315
user4 A 2021-12-15 14:48:09.044315
我想要以下內容。其中總動作是動作的頻率
11-12 12-13 ... 14-15
user total_action action
user1 3 A 2 0 1
user1 1 B 0 0 1
user3 1 C 0 1 0
user4 1 D 0 1 0
user5 1 A 0 0 1
這里 11-12、12-13 是時間間隔(可以是字串格式,沒有問題)。我試過查看pd.Grouper但這也無濟于事。
uj5u.com熱心網友回復:
這是pd.crosstab:
(pd.crosstab([df.user, df.action],df.created_at.dt.hour,
margins=True, margins_name='total_action')
.iloc[:-1] # remove column total
)
輸出:
created_at 11 12 14 total_action
user action
user1 A 2 0 1 3
B 0 0 1 1
user3 C 0 1 0 1
D 0 1 0 1
user4 A 0 0 1 1
或者您可以groupby與 grouper 一起使用,例如:
(df.groupby(['user','action', pd.Grouper(key='created_at', freq='H')])
.size().unstack(fill_value=0)
.reset_index()
)
輸出:
created_at user action 2021-12-15 11:00:00 2021-12-15 14:00:00 2021-12-15 12:00:00
0 user1 A 2 1 0
1 user1 B 0 1 0
2 user3 C 0 0 1
3 user3 D 0 0 1
4 user4 A 0 1 0
你可以添加total_action列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/385650.html
