pandas - 应用日期时间功能

时间:2015-04-03 07:48:18

标签: python datetime pandas

我超越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。

2 个答案:

答案 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