Pandas:如何使用两个条件过滤日期时间列

时间:2018-04-12 21:09:09

标签: python pandas

我有一个datetime列,我正在尝试查找具有特定条目的条目 工作日名称和月份基于用户输入。用户输入是字符串,可以是星期日,星期一,......星期六和月,1月,2月,... 6月。

    Unnamed: 0  Start Time  End Time    Trip Duration   Start Station   End Station User Type
0   1621326 2017-06-21 08:36:34 2017-06-21 08:44:43 489.066 14th & Belmont St NW    15th & K St NW  Subscriber
1   482740  2017-03-11 10:40:00 2017-03-11 10:46:00 402.549 Yuma St & Tenley Circle NW  Connecticut Ave & Yuma St NW    Subscriber
2   1330037 2017-05-30 01:02:59 2017-05-30 01:13:37 637.251 17th St & Massachusetts Ave NW  5th & K St NW   Subscriber

根据以前的用户输入(user_month)获取月份名称:

df[df['Start Time'].dt.month == dt.datetime.strptime(user_month, '%B').month]

根据以前的用户输入(user_day)获取工作日名称:

 df[df['Start Time'].dt.weekday_name == user_day]

每个处理一个用户案例的选择都是月份名称或工作日名称,我正在努力解决一个案例,包括月份名称(字符串)和工作日名称(字符串)都是基于这两种选择得出的。

2 个答案:

答案 0 :(得分:0)

IIUC:您可以从日期列中自定义提取日期和月份,然后连接您的输入。

pd.to_datetime(df['Start Time']).dt.strftime('%A %B') 

0    Wednesday June
1    Saturday March
2       Tuesday May
Name: Start Time, dtype: object

与用户输入比较

pd.to_datetime(df['Start Time']).dt.strftime('%A %B') == 'Wednesday June'

0     True
1    False
2    False
Name: Start Time, dtype: bool

过滤匹配用户输入的数据框:

df[pd.to_datetime(df['Start Time']).dt.strftime('%A %B') == 'Wednesday June']

   Unnamed: 0           Start Time             End Time  Trip Duration  \
0     1621326  2017-06-21 08:36:34  2017-06-21 08:44:43        489.066   

          Start Station     End Station   User Type  
0  14th & Belmont St NW  15th & K St NW  Subscriber  

答案 1 :(得分:0)

只需使用&并按以下条件进行过滤:

df[(df['Start Time'].dt.month == dt.datetime.strptime(user_month, '%B').month) & \
   (df['Start Time'].dt.weekday_name == user_day)]