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

时间:2016-10-17 00:09:22

标签: python pandas dataframe

两个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)

distancesDF:

   distances    names
0        100        A
1        200        B
2        300        C

datesDF:

    dates  flights
0  1/1/16        A
1  1/2/16        B
2  1/3/16        C

我想将它们合并到单个Dataframe中,使匹配的实体与相应的距离和日期同步。因此得到的DataFame看起来像这样:

resultDF:

   distances    names     dates 
0        100        A    1/1/16 
1        200        B    1/2/16 
2        300        C    1/3/16

完成它的方法是什么?

1 个答案:

答案 0 :(得分:2)

除了位置索引之外,没有什么能将这些数据帧联系在一起。您可以使用pd.concat

完成所需的示例输出
pd.concat([distancesDF, datesDF.dates], axis=1)

enter image description here

解决编辑和@ 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)

然后以下两个选项产生相同且可能需要的结果。

<强> 合并

 distancesDF.merge(datesDF, left_on='names', right_on='flights')[['distances', 'names', 'dates']]

<强> 加入

distancesDF.join(datesDF.set_index('flights'), on='names')

都产生

enter image description here