gpt4 book ai didi

python - 匹配数据帧之间的部分表达式

转载 作者:行者123 更新时间:2023-12-01 09:00:28 25 4
gpt4 key购买 nike

我正在尝试在数据框中的列之间执行部分字符串匹配,例如:

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。

我能够使用正则表达式匹配多个嵌套循环,但想知道是否有一种方法可以使用 panda 的库来更有效地执行操作。

最佳答案

  • reshape 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 列

  • 获取 df_B 中唯一单词的列表
  • 在 df_B 中创建一个新列,以从 df_B 中查找匹配的单词df_A
  • 合并和过滤
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"]]

关于python - 匹配数据帧之间的部分表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52491953/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com