我在pandas中有2个Dataframes,我希望INNER加入JoinColumn
上的2个表,但Table1.JoinColumn
中的值与1_String1_0
类似,而Table2.JoinColumn
中的值就像2_String1_1
,有什么方法可以在不将列值拆分“_”的情况下加入两个表,然后再加入。
Table1= pd.DataFrame({'JoinColumn' : pd.Series(['1_Abc_0','2_Cde_1','3_Efg_0','5_xyz_1'], index=['a', 'b', 'c','d']), 'Col2' : pd.Series([10, 20, 30, 40], index=['a', 'b', 'c', 'd']),'Col3' : pd.Series([1, 2., 3., 4.], index=['a', 'b', 'c', 'd'])})
Table2= pd.DataFrame({'JoinColumn' : pd.Series(['2_Abc_1','2_Cde_0','6_Efg_0','9_xyz_2'], index=['a', 'b', 'c','d']), 'Col2' : pd.Series([10, 20, 30, 40], index=['a', 'b', 'c', 'd']),'Col3' : pd.Series([1, 2., 3., 4.], index=['a', 'b', 'c', 'd'])})
我想在JoinColumn
上合并这两个表,考虑“Abc”,“xyz”等值。
答案 0 :(得分:1)
我认为必须拆分,但Series
应输入left_on
和right_on
参数:
df = pd.merge(Table1,
Table2,
left_on=Table1['JoinColumn'].str.split('_').str[1],
right_on=Table2['JoinColumn'].str.split('_').str[1])
print (df)
Col2_x Col3_x JoinColumn_x Col2_y Col3_y JoinColumn_y
0 10 1.0 1_Abc_0 10 1.0 2_Abc_1
1 20 2.0 2_Cde_1 20 2.0 2_Cde_0
2 30 3.0 3_Efg_0 30 3.0 6_Efg_0
3 40 4.0 5_xyz_1 40 4.0 9_xyz_2