我想这已经被涵盖了,但是我似乎在帖子中找不到有关合并和加入熊猫(Pandas Merging 101)的信息
我基本上有2个PANDAS,只想根据它们的匹配记录来合并它们。 例如:
假设我有这两个数据框:
df1:
AQROUTES_3 ... Indice de performance
0 Autoroute15 ... 0.696118
1 AvenuedAnjou ... 1.954598
2 AvenuedAnjou ... 1.632500
3 AvenuedAnjou ... 1.831760
4 RangSaint_Andre ... 1.350640
5 AvenuedePicardie ... 2408.779
df2:
FID AQROUTES_3 ... BEARING E_ID
751 751 AvenuedAnjou ... 156.554001 Anjou5
723 723 AvenuedAnjou ... 156.554001 Anjou10
692 692 AvenuedAnjou ... 156.554001 Anjou15
12 12 RangSaint_Andre ... 140.352997 SaintA10
1141 1141 AvenuedePicardie ... 359.289001 Picardi5
我想将它们合并在一起(将df1合并到df2,从而将df1的数据添加到df2中),同时仅保留匹配的记录,以使输出数据帧为:
FID AQROUTES_3 ... BEARING E_ID Indice de performance
751 751 AvenuedAnjou ... 156.554001 Anjou5 1.954598
723 723 AvenuedAnjou ... 156.554001 Anjou10 1.632500
692 692 AvenuedAnjou ... 156.554001 Anjou15 1.831760
12 12 RangSaint_Andre ... 140.352997 SaintA10 1.350640
1141 1141 AvenuedePicardie ... 359.289001 Picardi5 2408.779
请注意,由于记录未在df2.AQROUTES_3中找到匹配项,因此尚未合并df1的第一个条目(Autoroute15)。
再次感谢您的帮助!
答案 0 :(得分:0)
如果要获得预期的结果,则合并键在数据帧的至少一侧必须唯一。这个想法是以某种方式“创建”唯一的密钥。为了证明这一点,我在E_ID
的{{1}}列中进行了弥补:
df1
df1
AQROUTES_3 Indice de performance E_ID
0 Autoroute15 0.696118 NaN
1 AvenuedAnjou 1.954598 Anjou5
2 AvenuedAnjou 1.632500 Anjou10
3 AvenuedAnjou 1.831760 Anjou15
4 RangSaint_Andre 1.350640 SaintA10
5 AvenuedePicardie 2408.779000 Picardi5
df2
在这种情况下,下面的代码将起作用。
FID AQROUTES_3 BEARING E_ID
0 751 AvenuedAnjou 156.554001 Anjou5
1 723 AvenuedAnjou 156.554001 Anjou10
2 692 AvenuedAnjou 156.554001 Anjou15
3 12 RangSaint_Andre 140.352997 SaintA10
4 1141 AvenuedePicardie 359.289001 Picardi5
当然,这是本地化的解决方案,如果两列In [4]: df1['KEY'] = df1['AQROUTES_3'] + '_' + df1['E_ID'] #create a unique key
...: df2['KEY'] = df2['AQROUTES_3'] + '_' + df2['E_ID'] #create a unique key
...: df2.drop(['AQROUTES_3', 'E_ID'], axis=1, inplace=True) #no longer needed
...: df3 = pd.merge(df1, df2, on='KEY', how='right').drop('KEY', axis=1) #merge
...: df3 = df3[['FID', 'AQROUTES_3', 'BEARING', 'E_ID', 'Indice de performance']] #arrange columns
...: df3
Out[4]:
FID AQROUTES_3 BEARING E_ID Indice de performance
0 751 AvenuedAnjou 156.554001 Anjou5 1.954598
1 723 AvenuedAnjou 156.554001 Anjou10 1.632500
2 692 AvenuedAnjou 156.554001 Anjou15 1.831760
3 12 RangSaint_Andre 140.352997 SaintA10 1.350640
4 1141 AvenuedePicardie 359.289001 Picardi5 2408.779000
和AQROUTES_E
的组合不是唯一的,则可能无法一概而论,但我希望您有所想法。
希望这会有所帮助。