我正在尝试查找平均工作日 = 5天和平均周末 = 2天的平均旅行时间。'
我正在尝试汇总和查找具有相同“时间”和相同“ Day_type”的所有行的平均时间。因为“时间”值也包括秒,所以我发现在匹配属于同一“时间”的所有veh-time时遇到一些麻烦。
我的数据框通过以下方式设置:
veh-time distance Date Time Day_of_week Day_type
0 72 379.0 2018-10-18 22:15:21 Thursday Weekday
1 72 379.0 2018-10-18 22:30:21 Friday Weekend
2 72 379.0 2018-10-18 22:45:22 Saturday Weekend
3 72 379.0 2018-10-18 23:00:20 Sunday Weekday
4 72 379.0 2018-10-18 23:15:21 Monday Weekday
5 72 379.0 2018-10-18 23:15:21 Tuesday Weekday
6 72 379.0 2018-10-18 23:15:21 Wednesday Weekday
7 72 379.0 2018-10-18 22:15:21 Thursday Weekday
8 72 379.0 2018-10-18 22:30:21 Friday Weekend
9 72 379.0 2018-10-18 22:45:22 Saturday Weekend
10 72 379.0 2018-10-18 23:00:20 Sunday Weekday
11 72 379.0 2018-10-18 23:15:21 Monday Weekday
12 72 379.0 2018-10-18 23:15:21 Tuesday Weekday
13 72 379.0 2018-10-18 23:15:21 Wednesday Weekday
我猜这个过程看起来像这样:
步骤1:
拆分“时间”列,使其仅仅显示HH:MM。也许使用regex
或str.split()
步骤2: 将所有匹配“时间”和“日期类型”的veh-time行进行分组-例如时间为22:15且日期类型为“工作日”的所有行
步骤3: 在步骤2中找到分组行的平均值后,添加新列:“ avg_vt”。 avg_vt = veh-time + veh-time等。/确定了#个Day_type实例
谢谢
R
答案 0 :(得分:0)
将transform
用于由聚合值填充的新列,将提取HH:MM
与n=1
一起使用rsplit
,仅从第一个:
开始从右侧分割或转换为日期时间,然后转换为strftime
的HH:MM
字符串:
df['avg_vt'] = df.groupby([df['Time'].str.rsplit(':', n=1).str[0],
'Day_type'])['veh-time'].transform('mean')
替代:
df['avg_vt'] = df.groupby([pd.to_datetime(df['Time']).dt.strftime('%H:%M'),
'Day_type'])['veh-time'].transform('mean')
print (df)
veh-time distance Date Time Day_of_week Day_type avg_vt
0 72 379.0 2018-10-18 22:15:21 Thursday Weekday 72
1 72 379.0 2018-10-18 22:30:21 Friday Weekend 72
2 72 379.0 2018-10-18 22:45:22 Saturday Weekend 72
3 72 379.0 2018-10-18 23:00:20 Sunday Weekday 72
4 72 379.0 2018-10-18 23:15:21 Monday Weekday 72
5 72 379.0 2018-10-18 23:15:21 Tuesday Weekday 72
6 72 379.0 2018-10-18 23:15:21 Wednesday Weekday 72
7 72 379.0 2018-10-18 22:15:21 Thursday Weekday 72
8 72 379.0 2018-10-18 22:30:21 Friday Weekend 72
9 72 379.0 2018-10-18 22:45:22 Saturday Weekend 72
10 72 379.0 2018-10-18 23:00:20 Sunday Weekday 72
11 72 379.0 2018-10-18 23:15:21 Monday Weekday 72
12 72 379.0 2018-10-18 23:15:21 Tuesday Weekday 72
13 72 379.0 2018-10-18 23:15:21 Wednesday Weekday 72
详细信息:
print (df['Time'].str.rsplit(':', n=1).str[0])
0 22:15
1 22:30
2 22:45
3 23:00
4 23:15
5 23:15
...
Name: Time, dtype: object