我有以下数据框
site start_time end_time day_week bike_repair car_repair touring
0 a1 01/01/1901 11:00 01/01/1901 11:15 Sat_1 1 0 0
1 a2 01/01/1901 11:15 01/01/1901 11:30 Sat_1 0 0 1
2 a3 01/01/1901 11:30 01/01/1901 11:45 Sat_1 1 1 0
3 a4 01/01/1901 11:45 01/01/1901 12:00 Sat_1 1 0 0
4 a5 01/01/1901 12:00 01/01/1901 12:15 Sat_1 0 1 1
5 a6 01/01/1901 12:15 01/01/1901 12:30 Sat_1 1 1 1
6 a7 01/01/1901 12:30 01/01/1901 12:45 Sat_1 1 0 1
7 a8 01/01/1901 12:45 01/01/1901 13:00 Sat_2 0 1 0
8 a9 01/01/1901 13:00 01/01/1901 13:15 Sat_2 0 0 0
9 a10 01/01/1901 13:15 01/01/1901 13:30 Sat_2 1 1 1
10 a11 01/01/1901 13:30 01/01/1901 13:45 Sat_2 1 1 1
11 a12 01/01/1901 13:45 01/01/1901 14:00 Sat_2 1 0 1
12 a13 01/01/1901 14:00 01/01/1901 14:15 Sat_2 0 1 1
13 a14 01/01/1901 14:15 01/01/1901 14:30 Sat_2 0 1 1
请使用pd.read_clipboard(sep='\t')
将df读入编辑器。
1表示我在15分钟的间隔内拥有该技能的知识,而0表示我没有。
day_week是指星期几和星期几。
现在,我想了解的是在任何给定时间我拥有什么覆盖范围。我还有另一个数据框,我的店铺的开闭时间我想在经过一些争论后合并到其中。
我从中融化了数据框,它给了我以下内容
(pd.melt(so,id_vars=['site','start_time','end_time','day_week']
,var_name='Skill',value_name='Coverage'))
site start_time end_time day_week Skill Coverage
0 a1 01/01/1901 11:00 01/01/1901 11:15 Sat_1 bike_repair 1
1 a2 01/01/1901 11:15 01/01/1901 11:30 Sat_1 bike_repair 0
2 a3 01/01/1901 11:30 01/01/1901 11:45 Sat_1 bike_repair 1
3 a4 01/01/1901 11:45 01/01/1901 12:00 Sat_1 bike_repair 1
4 a5 01/01/1901 12:00 01/01/1901 12:15 Sat_1 bike_repair 0
5 a6 01/01/1901 12:15 01/01/1901 12:30 Sat_1 bike_repair 1
6 a7 01/01/1901 12:30 01/01/1901 12:45 Sat_1 bike_repair 1
7 a8 01/01/1901 12:45 01/01/1901 13:00 Sat_2 bike_repair 0
8 a9 01/01/1901 13:00 01/01/1901 13:15 Sat_2 bike_repair 0
9 a10 01/01/1901 13:15 01/01/1901 13:30 Sat_2 bike_repair 1
10 a11 01/01/1901 13:30 01/01/1901 13:45 Sat_2 bike_repair 1
这使我接近想要的东西,然后我想使用this帖子中的答案,但是我遇到了以下问题:
融化后的数据为Skill
列中的600万行和15种唯一类型
尝试调整答案后出现内存错误,因此可以将其更改为匹配15分钟间隔并求和coverage列?
我正在尝试获得
site time day_week skill coverage
0 a1 11:00 Sat_1 bike_repair 1
1 a1 11:15 Sat_1 bike_repair 0
2 a1 11:30 Sat_1 bike_repair 1
3 a1 11:45 Sat_1 bike_repair 1
4 a1 12:00 Sat_1 bike_repair 0
5 a1 12:15 Sat_1 bike_repair 1
OR
site start_time day_week skill Coverage
0 a1 11:01 Sat_1 bike_repair 1
1 a1 11:02 Sat_1 bike_repair 1
2 a1 11:03 Sat_1 bike_repair 1
3 a1 11:04 Sat_1 bike_repair 1
4 a1 11:05 Sat_1 bike_repair 1
5 a1 11:06 Sat_1 bike_repair 1
6 a1 11:07 Sat_1 bike_repair 1
7 a1 11:08 Sat_1 bike_repair 1
8 a1 11:09 Sat_1 bike_repair 1
9 a1 11:10 Sat_1 bike_repair 1
10 a1 11:11 Sat_1 bike_repair 1
11 a1 11:12 Sat_1 bike_repair 1
12 a1 11:13 Sat_1 bike_repair 1
13 a1 11:14 Sat_1 bike_repair 1
14 a1 11:15 Sat_1 bike_repair 0
15 a1 11:16 Sat_1 bike_repair 0
16 a1 11:17 Sat_1 bike_repair 0
17 a1 11:18 Sat_1 bike_repair 0
18 a1 11:19 Sat_1 bike_repair 0
答案 0 :(得分:1)
我认为您需要:
so['start_time'] = pd.to_datetime(so['start_time'])
so['end_time'] = pd.to_datetime(so['end_time'])
df = (df.groupby(['site','Skill', df['start_time'].dt.time,'day_week'])['Coverage']
.sum()
.reset_index())