Python:基于多个条件汇总和平均行

时间:2018-11-06 11:58:52

标签: python pandas dataframe

我正在尝试查找平均工作日 = 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。也许使用regexstr.split()

步骤2: 将所有匹配“时间”和“日期类型”的veh-time行进行分组-例如时间为22:15且日期类型为“工作日”的所有行

步骤3: 在步骤2中找到分组行的平均值后,添加新列:“ avg_vt”。 avg_vt = veh-time + veh-time等。/确定了#个Day_type实例

谢谢

R

1 个答案:

答案 0 :(得分:0)

transform用于由聚合值填充的新列,将提取HH:MMn=1一起使用rsplit,仅从第一个:开始从右侧分割或转换为日期时间,然后转换为strftimeHH: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