python - 使用顺序时间序列构建数据框

标签 python pandas dataframe

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

   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.aggfirst, 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/

相关文章:

python - gae-sessions 'thread._local' 对象没有属性 'current_session'

python - Anaconda - 通过 anaconda 提示更新包被限制

python - sklearn.feature_selection 的 F_Regression

python - 如何绘制 100% 堆积条形图

python - Pandas 数据帧组 : sum one column, 从其他人那里获取第一个元素

python - pandas DataFrame replace() 使用正则表达式

python - Python 中更好的函数组合

python - 如何根据字典列表中的特定值在单独的 Dataframe 列中创建列表?

python - 从 csv 文件中读取数据,同时监视文件夹中的更改

scala - 如何更改 Spark 数据框中的列位置?