我正在尝试将两个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
任何建议将不胜感激。非常感谢
答案 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