Pandas:重采样后计算唯一值

7 投票
3 回答
8790 浏览
提问于 2025-04-18 03:40

我刚开始学习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

撰写回答