我有一个熊猫数据框,其中一栏是日期时间。数据跨越一个月,并按时间升序排序。现在我要分离出周末和工作日的数据,这是我的代码:
data = pd.read_csv('Data.csv')
data.head()
Time A B C
0 2018-12-26 14:04:05.519842 276 120 76
1 2018-12-26 14:05:05.730416 52 52 12
2 2018-12-26 14:07:07.791897 52 52 12
3 2018-12-26 14:08:05.373717 200 210 40
4 2018-12-26 14:10:05.861872 40 106 0
data['weekday'] = data['Time'].apply(lambda x: x.weekday())
weekday_data = data[data['weekday'] < 5 ].drop(columns=['weekday'])
weekend_data = data[data['weekday'] >= 5 ].drop(columns=['weekday'])
因此weekday_data
包含周一至周五的所有数据,weekend_data
包含周六和周日的所有数据。
现在,我希望周末数据包含从星期五下午5点开始的所有数据(不是星期五的所有数据)到星期日23:59:00。
注意:必须像我的原始数据一样对2个输出数据帧(weekday_data
和weekend_data
)进行时间排序。
我该如何实现?
答案 0 :(得分:1)
使用:
rng = pd.date_range('2019-03-29 11:00:00', periods=30, freq='3H')
data = pd.DataFrame({'Time': rng, 'a': range(len(rng))})
print (data)
Time a
0 2019-03-29 11:00:00 0
1 2019-03-29 14:00:00 1
2 2019-03-29 17:00:00 2
3 2019-03-29 20:00:00 3
4 2019-03-29 23:00:00 4
5 2019-03-30 02:00:00 5
6 2019-03-30 05:00:00 6
7 2019-03-30 08:00:00 7
8 2019-03-30 11:00:00 8
9 2019-03-30 14:00:00 9
10 2019-03-30 17:00:00 10
11 2019-03-30 20:00:00 11
12 2019-03-30 23:00:00 12
13 2019-03-31 02:00:00 13
14 2019-03-31 05:00:00 14
15 2019-03-31 08:00:00 15
16 2019-03-31 11:00:00 16
17 2019-03-31 14:00:00 17
18 2019-03-31 17:00:00 18
19 2019-03-31 20:00:00 19
20 2019-03-31 23:00:00 20
21 2019-04-01 02:00:00 21
22 2019-04-01 05:00:00 22
23 2019-04-01 08:00:00 23
24 2019-04-01 11:00:00 24
25 2019-04-01 14:00:00 25
26 2019-04-01 17:00:00 26
27 2019-04-01 20:00:00 27
28 2019-04-01 23:00:00 28
29 2019-04-02 02:00:00 29
不需要新的列,通过Series.dt.weekday
创建掩码,然后将>5
的{{1}}与另外一个掩码的按位|
连接起来的OR
Series.dt.hour
s-由Fridays
链接为按位的&
:
AND
m1 = data['Time'].dt.weekday >= 5
m2 = (data['Time'].dt.weekday == 4) & (data['Time'].dt.hour >= 17)
m = m1 | m2
weekend_data = data[m]
weekday_data = data[~m]
print (weekend_data)
Time a
2 2019-03-29 17:00:00 2
3 2019-03-29 20:00:00 3
4 2019-03-29 23:00:00 4
5 2019-03-30 02:00:00 5
6 2019-03-30 05:00:00 6
7 2019-03-30 08:00:00 7
8 2019-03-30 11:00:00 8
9 2019-03-30 14:00:00 9
10 2019-03-30 17:00:00 10
11 2019-03-30 20:00:00 11
12 2019-03-30 23:00:00 12
13 2019-03-31 02:00:00 13
14 2019-03-31 05:00:00 14
15 2019-03-31 08:00:00 15
16 2019-03-31 11:00:00 16
17 2019-03-31 14:00:00 17
18 2019-03-31 17:00:00 18
19 2019-03-31 20:00:00 19
20 2019-03-31 23:00:00 20