例如,我正在尝试在数据帧中的列之间执行部分字符串匹配:
df_A:
Items_A
purse
string
hat
glue
gum
cherry
cherry
cherry pie
和
df_B:
1 2 3
string gum cherry
glue
所需的输出:
df_matched:
matched Items_A
0 purse
1 string
0 hat
1 glue
2 gum
3 cherry
3 cherry
3 cherry pie
请注意,匹配列中的数字是匹配列中的标签,分别是1、2或3。如果不匹配,则标签为0。
我能够使用带有多个嵌套循环的正则表达式匹配,但想知道是否有一种方法可以使用熊猫的库来更有效地执行操作。
答案 0 :(得分:1)
重塑df_B以获取此信息:
level_0 level_1 0
0 0 1 string
1 0 2 gum
2 0 3 cherry
3 1 1 glue
重命名df_B列
import regex df_B = df_B.stack().reset_index() df_B = df_B.rename(columns={"level_1": "matched", 0: "Items_A"}) items = df_B.Items_A.unique() def partial_match(x, items): for item in items: if regex.search(r'.?'+item+'.?', x): return item return 0 df_A["matching_item"] = df_A["Items_A"].apply(lambda x: partial_match(x, items)) df_A = df_A.merge(df_B, how="left", left_on="matching_item", right_on="Items_A", suffixes=('', '_y')) df_A = df_A.loc[:,["Items_A", "matched"]]