如何通过正则表达式合并熊猫表

Wen*_*eng 4 python regex merge join pandas

我想知道是否有一种快速的方法可以通过 python 中的正则表达式合并两个 Pandas 表。

例如:表A

col1 col2             
1    apple_3dollars_5        
2    apple_2dollar_4
1    orange_5dollar_3
1    apple_1dollar_3
Run Code Online (Sandbox Code Playgroud)

表B

col1 col2
good (apple|oragne)_\dollars_5
bad  .*_1dollar_.*
ok   oragne_\ddollar_\d
Run Code Online (Sandbox Code Playgroud)

输出:

col1 col2              col3
1    apple_3dollars_5  good
1    orange_5dollar_3  ok
1    apple_1dollar_3   bad
Run Code Online (Sandbox Code Playgroud)

这只是一个例子,我想要的不是通过一个完全匹配的 col 合并,我想通过一些正则表达式加入。谢谢!

Max*_*axU 5

首先修复 DataFrame 中的BRegEx:

In [222]: B
Out[222]:
   col1                        col2
0  good  (apple|oragne)_\ddollars_5
1   bad               .*_1dollar_.*
2    ok          orange_\ddollar_\d
Run Code Online (Sandbox Code Playgroud)

现在我们可以准备以下变量:

In [223]: to_repl = B.col2.values.tolist()

In [224]: vals = B.col1.values.tolist()

In [225]: to_repl
Out[225]: ['(apple|oragne)_\\ddollars_5', '.*_1dollar_.*', 'orange_\\ddollar_\\d']

In [226]: vals
Out[226]: ['good', 'bad', 'ok']
Run Code Online (Sandbox Code Playgroud)

最后我们可以在替换函数中使用它们:

In [227]: A['col3'] = A['col2'].replace(to_repl, vals, regex=True)

In [228]: A
Out[228]:
   col1              col2             col3
0     1  apple_3dollars_5             good
1     2   apple_2dollar_4  apple_2dollar_4
2     1  orange_5dollar_3               ok
3     1   apple_1dollar_3              bad
Run Code Online (Sandbox Code Playgroud)