如何使用自定义计数重新采样和应用功能

时间:2018-11-05 15:07:59

标签: python pandas dataframe time-series

我是数据帧的新手,正在努力寻找如何实现以下目标的方法:

我已经有一个像这样的时间序列的数据帧:

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()

但是我不知道如何从那里建造。当我不得不开始复合方法时,我一直陷于困境。

我还知道您可以“应用”自定义功能,但也无法使其正常工作。

有人可以帮我指出正确的方向吗?加上有关将来考虑此类问题的建议?非常感谢。

1 个答案:

答案 0 :(得分:0)

使用groupbypd.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