熊猫-如何过滤“最频繁的” Datetime对象

法比奥·拉曼纳(Fabio Lamanna)

我正在使用如下所示的DataFrame:

User_ID    Datetime
01    2014-01-01 08:00:00
01    2014-01-02 09:00:00
02    2014-01-02 10:00:00
02    2014-01-03 11:00:00
03    2014-01-04 12:00:00
04    2014-01-04 13:00:00
05    2014-01-02 14:00:00

我想根据“日期时间”列在某些条件下过滤用户,例如,仅过滤具有一个事件/月的用户,或仅过滤具有夏季的事件的用户,等等。

到目前为止,我已经将df与分组:

g = df.groupby(['User_ID','Datetime']).size()

获取每个用户在时间上的“痕迹”:

User_ID    Datetime
01    2014-01-01 08:00:00
      2014-01-02 09:00:00
02    2014-01-02 10:00:00
      2014-01-03 11:00:00
03    2014-01-04 12:00:00
04    2014-01-04 13:00:00
05    2014-01-02 14:00:00

然后,我应用了一个蒙版来过滤,例如,具有多个跟踪的“用户”:

mask = df.groupby('User_ID')['Datetime'].apply(lambda g: len(g)>1)
df = df[df['User_ID'].isin(mask[mask].index)]

所以这很好。我正在寻找一种功能,而不是lambda g: len(g)>1能够像以前所说的那样在不同条件下过滤用户。尤其是过滤每月出现一次的用户。

埃德Chum

只要您的'Datetime'dtype已经是日期时间,并且正在运行0.15.0或更高版本的pandas,那么除了用户ID之外,您还可以按月份分组,然后通过检查组的长度来过滤结果:

In [29]:

df.groupby(['User_ID',df['Datetime'].dt.month]).filter(lambda x: len(x) > 1)
Out[29]:
   User_ID            Datetime
0        1 2014-01-01 08:00:00
1        1 2014-01-02 09:00:00
2        2 2014-01-02 10:00:00
3        2 2014-01-03 11:00:00

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章