Pandas:重采样后计算唯一值
我刚开始学习Pandas,想要把我的数据按日期分组,并计算每组中独特的值。
我的数据大概是这样的:
User, Type
Datetime
2014-04-15 11:00:00, A, New
2014-04-15 12:00:00, B, Returning
2014-04-15 13:00:00, C, New
2014-04-20 14:00:00, D, New
2014-04-20 15:00:00, B, Returning
2014-04-20 16:00:00, B, Returning
2014-04-20 17:00:00, D, Returning
我想要得到的结果是:把日期时间的索引按天重新采样(这个我会做),然后统计每天的独特用户数量。现在我对“类型”这一列不感兴趣。
Day, Unique Users
2014-04-15, 3
2014-04-20, 2
我试着用 df.user.resample('D', how='count').unique
,但好像得不到正确的结果。
3 个回答
0
我也遇到了同样的问题。Karl D的回答适用于某种重新索引,比如按日期来索引。但是如果你想要的索引是
Jan 2014
Feb 2014
March 2014
然后把它作为时间序列来绘图呢?
我做了以下操作:
df.user.resample('M',lambda x: x.nunique())
2
我遇到了同样的问题。使用nunique进行重采样对我有效。重采样的好处在于,它可以很简单地改变采样的频率,比如可以改成小时或分钟,而且时间戳会保留作为索引。
df.user.resample('D').nunique()
8
你不需要重新取样就能得到你想要的结果。我觉得只用在日期上进行一次 groupby
就可以了:
print df.groupby(df.index.date)['User'].nunique()
2014-04-15 3
2014-04-20 2
dtype: int64
如果你想的话,可以在统计独立用户之后再进行重新取样,以填补时间序列中的空缺:
cnt = df.groupby(df.index.date)['User'].nunique()
cnt.index = cnt.index.to_datetime()
print cnt.resample('D')
2014-04-15 3
2014-04-16 NaN
2014-04-17 NaN
2014-04-18 NaN
2014-04-19 NaN
2014-04-20 2
Freq: D, dtype: float64