我有一个数据集,其中包含许多与不同船舶和港口相关的时间戳。
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
关于python - 使用顺序时间序列构建数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58513307/