如何使用其ID映射python中两个CSV文件中的值?

时间:2019-05-08 12:01:30

标签: python-3.x

我正在尝试将两个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

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

1 个答案:

答案 0 :(得分:0)

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