首页 > 解决方案 > 如何使用它们的 ID 映射 python 中两个 CSV 文件的值?

问题描述

我正在尝试将两个 CSV 文件之间的数据映射到一个输出结果或一个新的输出文件中。第一个文件包含机场代码列表及其对应的纬度和经度。第二个文件包含乘客的详细信息,包括他们的出发和目的地机场代码。

第一个 CSV 文件示例:

A_code Latitude Longitude
ATL   33.636719   -84.428067
PEK   40.080111   116.584556
LHR   51.4775     -0.461389

第二个 CSV 文件示例:

P_id  f_id from dest
usr1    1   ATL PEK
usr1    2   PEK LHR
usr2    1   ATL PEK
usr3    3   LHR ATL
usr2    3   LHR ATL

到目前为止我所做的是:


import csv
import pandas as pd

colnames = ['Pass_id', 'f_id', 'from', 'dest']
L1 = pd.read_csv(r"Passenger_data.csv",names=colnames)
colnames = ['f_id', 'from_lat', 'from_lon']
L2 = pd.read_csv(r"airports_data.csv",names=colnames)
result = pd.merge(L1, L2, how='left',on='from')

colnames = ['Pass_id', 'f_id', 'from', 'dest']
L1 = pd.read_csv(r"Passenger_data.csv",names=colnames)
colnames = ['f_id', 'dest_lat', 'dest_lon']
L2 = pd.read_csv(r"airports_data.csv",names=colnames)
result2 = pd.merge(L1, L2, how='left',on='dest')


然后我结合了result+result2的结果。

final= result['Pass_id']+' '+result['f_id']+' '+result['from_lat'].apply(str)+' '+result['from_lon'].apply(str)+' '+result2['dest_lat'].apply(str)+' '+result2['dest_lon'].apply(str)

我已经取得了我正在寻找的结果,但这是一个漫长且不切实际的过程。我相信有一种更快的方法可以做到这一点。组合(映射)后的预期结果应该是这样的

P_id  f_id from  dest   from_lat     from_lon    dest_lat  dest_lon
usr1    1   ATL   PEK  33.636719   -84.428067  40.080111   116.584556
usr1    2   PEK   LHR  40.080111   116.584556  51.4775     -0.461389
usr2    1   ATL   PEK  33.636719   -84.428067  40.080111   116.584556
usr3    3   LHR   ATL  51.4775     -0.461389   33.636719   -84.428067
usr2    3   LHR   ATL  51.4775     -0.461389   33.636719   -84.428067

任何建议将不胜感激。非常感谢

标签: python-3.x

解决方案


df = pd.read_csv('airports_data.csv')
df1 = pd.read_csv('Passenger_data.csv')
df = df.set_index('A_code')

df1['from_lat'] = df1['from'].map(df['Latitude'])
df1['from_lon'] = df1['from'].map(df['Longitude'])
df1['dest_lat'] = df1['dest'].map(df['Latitude'])
df1['dest_lon'] = df1['dest'].map(df['Longitude'])

输出将是

    P_id    f_id    from    dest    from_lat    from_lon    dest_lat    dest_lon
0   usr1    1   ATL PEK 33.636719   -84.428067  40.080111   116.584556
1   usr1    2   PEK LHR 40.080111   116.584556  51.477500   -0.461389
2   usr2    1   ATL PEK 33.636719   -84.428067  40.080111   116.584556
3   usr3    3   LHR ATL 51.477500   -0.461389   33.636719   -84.428067
4   usr2    3   LHR ATL 51.477500   -0.461389   33.636719   -84.428067

推荐阅读