我超越this问题以获取有关日期时间数据框的更多信息。使用像这样的DataFrame:
User_ID Datetime
01 2014-01-01 08:00:00
01 2014-02-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
01 2014-04-01 08:00:00
01 2014-03-02 09:00:00
01 2014-05-01 08:00:00
01 2014-06-02 09:00:00
01 2014-07-01 08:00:00
01 2014-08-02 09:00:00
01 2014-09-01 08:00:00
01 2014-10-02 09:00:00
01 2014-11-01 08:00:00
01 2014-12-02 09:00:00
其中用户与特定日期时间事件相关联。用户可以在一年中出现更多事件,例如每月12次,每天100次等,但我想仅过滤一年至少一次的用户/一年中的每个月。在上面的示例中,用户01。
答案 0 :(得分:1)
这是我的解决方案,假设你工作一年。
df是您的DataFrame
for user in df.User_ID.unique():
months = []
for d in df.Datetime[df.User_ID == user]:
months.append(d.month)
if( len(list(set(months))) == 12):
print('Im user ' + str(user))
答案 1 :(得分:1)
以下是使用pandas magic进行此操作的另一种方法:
df['Datetime'] = pd.to_datetime(df.Datetime) # You can skip this step if you already have it as Datatime object
df1 = df.groupby(['User_ID', df.Datetime.dt.year]).apply(lambda x: x.Datetime.dt.month.nunique())
ids = df1[df1 >= 12].index.get_level_values('User_ID')
df[df.User_ID.isin(ids)]
哪个收益率:
User_ID Datetime
0 1 2014-01-01 08:00:00
1 1 2014-02-02 09:00:00
7 1 2014-04-01 08:00:00
8 1 2014-03-02 09:00:00
9 1 2014-05-01 08:00:00
10 1 2014-06-02 09:00:00
11 1 2014-07-01 08:00:00
12 1 2014-08-02 09:00:00
13 1 2014-09-01 08:00:00
14 1 2014-10-02 09:00:00
15 1 2014-11-01 08:00:00
16 1 2014-12-02 09:00:00