如何将两个DataFrame合并为单个匹配列值

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)

完成它的方法是什么?

piR*_*red 2

除了位置索引之外,没有任何东西可以将这些数据帧联系在一起。您可以使用以下命令完成所需的示例输出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)

两者都产生

在此输入图像描述