熊猫:重新采样后计算唯一值

时间:2014-04-22 00:35:45

标签: python 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

这就是我想要达到的目的:将日期时间索引重新采样到当天(我可以做),并计算每天的唯一用户数。 我对' Type'不感兴趣。专栏。

Day, Unique Users
2014-04-15, 3
2014-04-20, 2

我正在尝试df.user.resample('D', how='count').unique,但它似乎没有给我正确答案。

3 个答案:

答案 0 :(得分:5)

您不需要进行重新取样即可在问题中获得所需的输出。我想你可以在日期只有一个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

答案 1 :(得分:0)

我遇到了同样的问题。重采样为nunique为我工作。重采样的好方法是,它可以非常轻松地将采样率更改为例如小时或分钟,并且将时间戳记为索引。

df.user.resample('D').nunique()

答案 2 :(得分:-1)

我遇到了同样的问题。 Karl D的答案适用于某种重建索引 - 例如,日期。但如果您希望索引

,该怎么办?
Jan 2014
Feb 2014
March 2014

然后将其绘制为时间序列?

这就是我的所作所为:

df.user.resample('M',lambda x: x.nunique())