Pandas:重新采样后计算唯一值

Posted

技术标签:

【中文标题】Pandas:重新采样后计算唯一值【英文标题】:Pandas: Count Unique Values after Resample 【发布时间】:2014-04-22 00:35:45 【问题描述】:

我刚刚开始使用 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,但它似乎没有给我正确的答案。

【问题讨论】:

【参考方案1】:

您无需重新采样即可在您的问题中获得所需的输出。我认为您只需在日期上输入 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

【讨论】:

我不得不使用print df.groupby(df.index.date)['User'].apply(lambda x: x.nunique()),但这有效。谢谢!【参考方案2】:

我遇到了同样的问题。 Resample 为我工作了 nunique。重新采样的好方法是它可以非常简单地将采样率更改为小时或分钟,并且时间戳保留为索引。

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

【讨论】:

【参考方案3】:

我遇到了同样的问题。 Karl D 的答案适用于某种重新索引——例如,在日期。但是如果你希望索引是

Jan 2014
Feb 2014
March 2014

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

这就是我所做的:

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

【讨论】:

以上是关于Pandas:重新采样后计算唯一值的主要内容,如果未能解决你的问题,请参考以下文章

用最少的观察次数对 Pandas 重新采样

当所有值都是 NaN 时,Pandas 重新采样以返回 NaN

Pandas 重新采样开始日期

Pandas 在日期列上重新采样

pandas的resample重采样

Pandas 重新采样倒数的时间序列(或反向重新采样)