我正在使用如下的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
能够在不同条件下过滤用户,正如我之前所说的那样。特别是过滤一次/月的用户。
答案 0 :(得分:1)
只要您的'Datetime'dtype已经是日期时间并且您正在运行pandas版本0.15.0或更高版本,那么除了用户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