我有这个数据框(类型可以是1或2):
user_id | timestamp | type
1 | 2015-5-5 12:30 | 1
1 | 2015-5-5 14:00 | 2
1 | 2015-5-5 15:00 | 1
我希望将数据分组六小时,在执行此操作时,我希望将type
保留为:
1
(如果在6小时内只有1个)2
(如果在6小时内只有2个)或3
(如果在6小时内同时存在1和2)这是我的代码:
df = df.groupby(['user_id', pd.TimeGrouper(freq=(6,'H'))]).mean()
产生:
user_id | timestamp | type
1 | 2015-5-5 12:00 | 4
但是,我希望得到3
而不是4.我想知道如何替换mean()
代码中的groupby
以产生所需的输出?
答案 0 :(得分:2)
试试这个:
In [54]: df.groupby(['user_id', pd.Grouper(key='timestamp', freq='6H')]) \
.agg({'type':lambda x: x.unique().sum()})
Out[54]:
type
user_id timestamp
1 2015-05-05 12:00:00 3
PS它只适用于给定类型:(1
,2
),因为它们的总和为3
另一个数据集:
In [56]: df
Out[56]:
user_id timestamp type
0 1 2015-05-05 12:30:00 1
1 1 2015-05-05 14:00:00 1
2 1 2015-05-05 15:00:00 1
3 1 2015-05-05 20:00:00 1
In [57]: df.groupby(['user_id', pd.Grouper(key='timestamp', freq='6H')]).agg({'type':lambda x: x.unique().sum()})
Out[57]:
type
user_id timestamp
1 2015-05-05 12:00:00 1
2015-05-05 18:00:00 1