【问题标题】:How to merge pandas table by regex on multiple columns如何通过正则表达式在多列上合并熊猫表
【发布时间】:2021-11-06 12:38:15
【问题描述】:

给定以下数据框 join\merge df1 和 df2 以按以下方式生成 df3: df1.a 加入正则表达式匹配到 df2.a 和 df1.b 加入正则表达式匹配到 df2.b

df1 = pd.DataFrame({'a': ['foo', 'bar','zoolo','foo','foo'], 'b': ['tty','abc', 'uhg','abc','tty'], 'c':[14,72,93,33,57]})
a b c
0 foo tty 14
1 bar abc 72
2 zoolo uhg 93
3 foo abc 33
4 foo tty 57
df2 = pd.DataFrame({'a': ['zool(o|r)','foo|oof','[badr]+'],'b': ['uh(f|g)','[ty]+','abc|bac'], 'j': [11,32,65]})
a b j
0 zool(o|r) uh(f|g) 11
1 foo|oof [ty]+ 32
2 [badr]+ abc|bac 65

结果

df3 = pd.DataFrame({'a': ['foo', 'bar','zoolo','foo'], 'b': ['tty','abc', 'uhg','tty'], 'c':[14,72,93,57],'j': [32,65,11,32]}, )
a b c j
0 foo tty 14 32
1 bar abc 72 65
2 zoolo uhg 93 11
4 foo tty 57 32

【问题讨论】:

    标签: python regex pandas dataframe join


    【解决方案1】:
    def func(dfRow):
        for index, row in df2.iterrows():
            if re.match(row["a"], dfRow["a"]) and re.match(row["b"], dfRow["b"]):
                return dfRow.append(row[["j"]])
    
    df1.apply(func, axis=1).dropna()
    

    【讨论】:

      猜你喜欢
      • 2018-09-06
      • 2013-02-25
      • 2017-07-13
      • 2020-06-09
      • 2017-06-18
      • 2016-12-31
      • 1970-01-01
      • 2015-11-18
      相关资源
      最近更新 更多