Python 函数按天聚合数据,对其他列执行总和和平均值



我有一个数据帧,如下所示:

trip_id     date    journey_duration    weekday
0   913460  2019-08-31  00:13:00    Sat
1   913459  2019-08-31  00:17:00    Sat
2   913455  2019-08-31  00:05:00    Sat
3   913454  2019-08-31  00:07:00    Sat
4   913453  2019-08-31  00:13:00    Sat
5   913452  2019-08-31  00:05:00    Sat
6   913451  2019-08-31  00:15:00    Sat
7   913450  2019-08-31  00:04:00    Sat
8   913449  2019-08-31  00:03:00    Sat
9   913448  2019-08-31  00:15:00    Sat
10  913443  2019-08-31  00:12:00    Sat
11  913442  2019-08-31  00:10:00    Sat
12  913441  2019-08-31  00:07:00    Sat
13  913440  2019-08-31  00:05:00    Sat
14  913435  2019-08-31  00:08:00    Sat
15  913434  2019-08-31  00:05:00    Sat
16  913433  2019-08-31  00:03:00    Sat
17  913432  2019-08-31  00:12:00    Sat
18  913431  2019-08-31  00:10:00    Sat
19  913429  2019-08-31  00:15:00    Sat

我想将其汇总到每日级别 - 将trip_id列更改为每天的旅行次数和每天的平均行程持续时间

我用过这个:

trip_data = (pd.to_datetime(trip_data['date'])
.dt.floor('d')
.value_counts()
.rename_axis('date')
.reset_index(name='count'))

这很适用于计算每天的行程,但这会降低行程持续时间

希望这是有道理的,意识到我的命名法可能不存在,因为我是新手

谢谢

这里有一种方法可以完成你的问题:

trip_data.date = pd.to_datetime(trip_data.date)
trip_data.journey_duration = pd.to_timedelta(trip_data.journey_duration)
trip_data = ( trip_data
.assign(date=trip_data.date.dt.floor('d'))
.groupby('date', as_index=False)
.agg(count=("trip_id", "count"), journey_duration=("journey_duration", "mean")) )

输出:

date  count journey_duration
0 2019-08-31     20  0 days 00:09:12

解释:

  • 确保date是熊猫日期时间,journey_duration是熊猫时间增量类型
  • 使用floor()date四舍五入到其日组件
  • 使用groupby()准备按唯一date聚合
  • 使用agg()聚合名为count的列中的counttrip_id,并使用meanjourney_duration进行聚合。

首先,将datejourney_duration转换为日期时间对象。由于journey_duration不包含日、月等,因此使用pd.to_timedelta进行转换可能是一个更好的主意:

df['date'] = pd.to_datetime(df['date'])
df['journey_duration'] = pd.to_timedelta(df['journey_duration'])

然后将date设置为索引,并将数据帧转换为每日频率,并使用agg对不同列进行多次操作:

df.set_index('date').resample('D').agg(no_trips_per_day=('trip_id', 'count'), 
avg_duration=('journey_duration', 'mean'))
no_trips_per_day  avg_duration
date        
2019-08-31      20  0 days 00:09:12

相关内容

  • 没有找到相关文章

最新更新