python - 基于时间的点之间的平均值
问题描述
我正在尝试使用 Python 来获取时间,以及在点之间移动的对象之间的平均速度。
数据看起来有点像这样,
location initialtime id speed distance
1 2020-09-18T12:03:14.485952Z car_uno 72 9km
2 2020-09-18T12:10:14.485952Z car_uno 83 8km
3 2020-09-18T11:59:14.484781Z car_duo 70 9km
7 2020-09-18T12:00:14.484653Z car_trio 85 8km
8 2020-09-18T12:12:14.484653Z car_trio 70 7.5km
我目前使用的功能基本上是这样的,
Speeds.index = pd.to_datetime(Speeds.index)
..etc
现在,如果我通常这样做,我只会采用 id 的唯一值,
for x in speeds.id.unique():
Speeds[speeds.id=="x"]...
但是这种方法确实行不通。
简单地查看随着时间的推移是否有多个 id 点,然后取给定时间的平均速度的最佳方法是什么?否则,如果没有多个值,则只返回速度本身。
我可以使用更简单的熊猫过滤器吗?
预期输出很简单,
area - id - initial time - journey time - average speed.
关键是要获得经过两点的车辆的平均时间和行程时间
解决方案
要获得平均速度和行程时间,您可以使用groupby()
并传入确定完整行程的列,例如id
或area
。
import pandas as pd
from io import StringIO
data = StringIO("""
area initialtime id speed
1 2020-09-18T12:03:14.485952Z car_uno 72
2 2020-09-18T12:10:14.485952Z car_uno 83
3 2020-09-18T11:59:14.484781Z car_duo 70
7 2020-09-18T12:00:14.484653Z car_trio 85
8 2020-09-18T12:12:14.484653Z car_trio 70
""")
df = pd.read_csv(data, delim_whitespace=True)
df["initialtime"] = pd.to_datetime(df["initialtime"])
# change to ["id", "area"] if need more granular aggregation
group_cols = ["id"]
time = df.groupby(group_cols)["initialtime"].agg([max, min]).eval('max-min').reset_index(name="journey_time")
speed = df.groupby(group_cols)["speed"].mean().reset_index(name="average_speed")
pd.merge(time, speed, on=group_cols)
id journey_time average_speed
0 car_duo 00:00:00 70.0
1 car_trio 00:12:00 77.5
2 car_uno 00:07:00 77.5
推荐阅读
- android - Retrofit2 拦截器调用 2 API
- c++ - 在c ++中的结构内创建声明的数组a [1]的多个实例
- google-cloud-platform - Google BigQuery 对 AvrologicalTypes 的支持
- java - 在异步多线程环境中维护时间顺序
- windows - Gitlab runner:验证 vs 状态
- soap - SharePoint 2010 以递归方式获取所有文件和文件夹
- html - 如何增量搜索网站中的文件?
- opencv - 从 1000 多张图像中模糊人物
- django - 如何修改我的登录名以验证电子邮件?
- javascript - jquery验证身份证号码