2015-04-03 4 views
0

Я выхожу за пределы вопроса this, чтобы получить дополнительную информацию о datetime dataframe. Работа с DataFrame следующим образом:pandas - применять функции datetime

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 в день и т. Д., Но я хотел бы фильтровать только пользователей с AT LEAST в одном случае/каждый месяц в году. В приведенном выше примере Пользователь 01.

ответ

1

Вот альтернативный способ сделать это с помощью панд магии:

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 
1

Это мое решение, предполагающее, что вы работаете в течение одного года.

ДФ Ваш 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)) 
Смежные вопросы