首页 > 解决方案 > pandas 通过数据框中的条目替换 id 号

问题描述

我有 2 个不同的数据框。一个看起来像这样

arriv depart stop_id
12:35 12:40  a2b
23:00 01:00  a1e

其他看起来像这样:

stop_id  lon   lat   name
a1e      12.1  13.2  Old Church
a2b      12.2  13.1  Postal Service

现在我想用数据的子集创建一个看起来像这样的数据框:

arriv depart stop_id  lon   lat   name
12:35 12:40  a2b      12.2  13.1  Postal Service
23:00 01:00  a1e      12.1  13.2  Old Church

基本上合并了两个数据框,但是对于停靠点列表有大量的双重条目。什么是这样做的好方法?

标签: pythonpandas

解决方案


我相信你想要的是:“对于第一个数据帧中的每个实例,合并 lon lat 和 name 列(在另一个数据帧中可用)。”

如果是这种情况,您可以使用 pd.merge():

import pandas as pd
timeDF = pd.DataFrame({
          "arriv":["12:35","23:00","13:35","12:35"],
          "depart":["12:40","01:00","14:25","14:35"],
          "stop_id":["a2b","a1e","a2b","a1e"]
          })
stopDF = pd.DataFrame({
          "long":["12.1","13.1"],
          "lat":["13.0","14.3"],
          "name":["nameA","nameB"],
          "stop_id":["a2b","a1e"]
          })
print(pd.merge(timeDF,stopDF,how='left',on='stop_id'))

输入:

arrive_departure_dataframe:
    arriv depart stop_id
0  12:35  12:40     a2b
1  23:00  01:00     a1e
2  13:35  14:25     a2b
3  12:35  14:35     a1e

stops_information_dataframe:
    long   lat   name stop_id
0  12.1  13.0  nameA     a2b
1  13.1  14.3  nameB     a1e

输出:

   arriv depart stop_id  long   lat   name
0  12:35  12:40     a2b  12.1  13.0  nameA
1  23:00  01:00     a1e  13.1  14.3  nameB
2  13:35  14:25     a2b  12.1  13.0  nameA
3  12:35  14:35     a1e  13.1  14.3  nameB

推荐阅读