首页 > 解决方案 > 构建具有顺序时间序列的数据框

问题描述

我有一个数据集,其中包含许多与不同船舶和港口相关的时间戳。

   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'])

标签: pythonpandasdataframe

解决方案


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

推荐阅读