我是数据帧的新手,正在努力寻找如何实现以下目标的方法:
我已经有一个像这样的时间序列的数据帧:
timestamp uuid source
2017-06-18 10:43:54 abc two
2017-06-18 03:38:23 fgh three
2017-06-18 07:37:02 abc two
2017-06-18 16:49:51 fgh one
2017-06-19 21:34:10 abc two
2017-06-19 16:49:51 knn three
2017-06-19 22:36:10 mug one
我正在尝试1)每天重新采样,2)找出哪些不重复用户在给定的一天中有多个来源并获得这些用户的计数
在18日,fgh有两个唯一来源(1),而abc只有一个来源(0),因此该天的计数为1。
19日,没有用户拥有多个来源,因此该天的计数为0。
结果
timestamp multi_source_users
2017-06-18 1
2017-06-19 0
我尝试了重采样和分组方式的几种组合,但是我总是对总计数感到困惑。
我从一些天真的东西开始...
df.resample('D').count()
或
df.groupby('uuid').count()
但是我不知道如何从那里建造。当我不得不开始复合方法时,我一直陷于困境。
我还知道您可以“应用”自定义功能,但也无法使其正常工作。
有人可以帮我指出正确的方向吗?加上有关将来考虑此类问题的建议?非常感谢。
答案 0 :(得分:0)
使用groupby
和pd.Grouper(freq=...)
,尝试以下操作。
(df.groupby([pd.Grouper(freq='1D'), 'uuid']).nunique() - 1)['source'].groupby(level=0).sum()
输出:
timestamp
2017-06-18 1
2017-06-19 0
Freq: D, Name: source, dtype: int64