Dataframe在连接列的String的一部分上连接pandas

时间:2018-01-29 13:11:30

标签: python pandas join

我在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”等值。

1 个答案:

答案 0 :(得分:1)

我认为必须拆分,但Series应输入left_onright_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