alp*_*ric 5 python dataframe pandas
两个DataFrame的匹配值存储在相应的"名称"和"航班"列中.当第一个DataFrame存储距离时,另一个存储日期:
import pandas as pd
distances = {'names': ['A', 'B','C'] ,'distances':[100, 200, 300]}
dates = {'flights': ['C', 'B', 'A'] ,'dates':['1/1/16', '1/2/16', '1/3/16']}
distancesDF = pd.DataFrame(distances)
datesDF = pd.DataFrame(dates)
Run Code Online (Sandbox Code Playgroud)
distancesDF:
distances names
0 100 A
1 200 B
2 300 C
Run Code Online (Sandbox Code Playgroud)
datesDF:
dates flights
0 1/1/16 A
1 1/2/16 B
2 1/3/16 C
Run Code Online (Sandbox Code Playgroud)
我想将它们合并到单个Dataframe中,使匹配的实体与相应的距离和日期同步.所以得到的DataFame看起来像这样:
resultDF:
distances names dates
0 100 A 1/1/16
1 200 B 1/2/16
2 300 C 1/3/16
Run Code Online (Sandbox Code Playgroud)
完成它的方法是什么?
除了位置索引之外,没有任何东西可以将这些数据帧联系在一起。您可以使用以下命令完成所需的示例输出pd.concat
pd.concat([distancesDF, datesDF.dates], axis=1)
Run Code Online (Sandbox Code Playgroud)
解决编辑和@kartik的评论
如果我们创建 dfs 来匹配显示的内容。
distances = {'names': ['A', 'B','C'] ,'distances':[100, 200, 300]}
dates = {'flights': ['A', 'B', 'C'] ,'dates':['1/1/16', '1/2/16', '1/3/16']}
distancesDF = pd.DataFrame(distances)
datesDF = pd.DataFrame(dates)
Run Code Online (Sandbox Code Playgroud)
那么以下两个选项会产生相同且可能期望的结果。
合并
distancesDF.merge(datesDF, left_on='names', right_on='flights')[['distances', 'names', 'dates']]
Run Code Online (Sandbox Code Playgroud)
加入
distancesDF.join(datesDF.set_index('flights'), on='names')
Run Code Online (Sandbox Code Playgroud)
两者都产生