python - 构建具有顺序时间序列的数据框
问题描述
我有一个数据集,其中包含许多与不同船舶和港口相关的时间戳。
obj_id timestamp port
0 4 2019-10-01 Houston
1 2 2019-09-01 New York
2 4 2019-07-31 Boston
3 1 2019-07-28 San Francisco
4 2 2019-10-15 Miami
5 1 2019-09-01 Honolulu
6 1 2019-08-01 Tokyo
我想通过将每个 obj_id 的最新时间戳/端口分配为“目的地”,将第二个最新的时间戳/端口分配为“起点”,构建一个包含最新船舶航行 (obj_id) 的单个记录的数据框。所以最终的结果看起来像这样:
obj_id origin_time origin_port destination_time destination_port
0 4 2019-07-31 Boston 2019-10-01 Houston
1 2 2019-09-01 New York 2019-10-15 Miami
3 1 2019-07-28 Tokyo 2019-09-01 Honolulu
我已经通过此代码成功过滤了每个 obj_id 的最新时间戳,但仍然无法找到过滤第二个最新时间戳的方法,更不用说将它们拉到一行中了。
df.sort_values(by ='timestamp', ascending = False).drop_duplicates(['obj_id'])
解决方案
groupby.agg
与 一起使用first, last
:
dfg = df.sort_values('timestamp').groupby('obj_id').agg(['first', 'last']).reset_index()
dfg.columns = [f'{c1}_{c2}' for c1, c2 in dfg.columns]
obj_id_ timestamp_first timestamp_last port_first port_last
0 1 2019-07-28 2019-09-01 San Francisco Honolulu
1 2 2019-09-01 2019-10-15 New York Miami
2 4 2019-07-31 2019-10-01 Boston Houston
推荐阅读
- sql - 如何在红移中获取过去 X 周的数据?
- javascript - 将水平线添加到 AmCharts4 哑铃图
- microsoft-graph-api - MS Graph API 仅在某些 IP 上返回混合集成错误
- ruby-on-rails - 多态性和 jsonapi-resources 错误
- c++ - 如何在 VTK 中显示图像数组
- python - 如何从网络摄像头捕获视频并将其提供给我在网络应用程序(浏览器内)内的 Yolov5 训练模型(在 PyTorch 中)?
- java - 如何使用 xsd 模式定义避免重复类型?
- centos7 - 为 centos 复制 netplan 名称服务器配置
- javascript - 将响应数据传递给数组
- java - 如何在 SharedPreferences 中永久保存数据