gpt4 book ai didi

Python - 在字符串列表中搜索子字符串列表,从另一个 Col 返回最大值

转载 作者:太空宇宙 更新时间:2023-11-04 09:22:47 24 4
gpt4 key购买 nike

df1 包含我要搜索的较大的主要字符串。 df2 包含一个子字符串列表,每个子字符串都有一个值。

import pandas as pd

df1 = pd.DataFrame(columns = ['MainString'])
df1 = df1.append({'MainString':'abcdef'}, ignore_index=True)
df1 = df1.append({'MainString':'ghijkl'}, ignore_index=True)
df1 = df1.append({'MainString':'mnopqr'}, ignore_index=True)
df1 = df1.append({'MainString':'stuvwx'}, ignore_index=True)

df2 = pd.DataFrame(columns = ['Substring','Value'])
df2 = df2.append({'Substring':'bcde','Value':0.5}, ignore_index=True)
df2 = df2.append({'Substring':'bcd','Value':0.6}, ignore_index=True)
df2 = df2.append({'Substring':'mno','Value':0.4}, ignore_index=True)
df2 = df2.append({'Substring':'stuv','Value':0.7}, ignore_index=True)
df2 = df2.append({'Substring':'uvwx','Value':0.7}, ignore_index=True)
df2 = df2.append({'Substring':'stu','Value':0.4}, ignore_index=True)

print(df1)
MainString
0 abcdef
1 ghijkl
2 mnopqr
3 stuvwx

print(df2)
Substring Value
0 bcde 0.5
1 bcd 0.6
2 mno 0.4
3 stuv 0.7
4 uvwx 0.7
5 stu 0.4

我想在 df1['MainString'] 中搜索 df2['Substring'] 中的值,但只返回最大值。如果有平局(例如 stuv 和 uvwx),返回第一个。所以决赛看起来像这样:

  MainString Substring Value
0 abcdef bcd 0.6
1 ghijkl NaN NaN
2 mnopqr mno 0.4
3 stuvwx stuv 0.7

不确定我是否需要循环遍历并评估每个 MainString 和每个 Substring。我试过改编 this solution但它只返回第一个匹配的字符串,而不是具有最高值的子字符串:

s_list = list(df2['Substring'])
s_list = '(' + '|'.join(s_list) + ')'
df1['test'] = df1['MainString'].str.extract(s_list, expand=False)

print(df1)
MainString test
0 abcdef bcde
1 ghijkl NaN
2 mnopqr mno
3 stuvwx stuv

最佳答案

来自 this answer 的代码允许您在子字符串匹配时加入两个数据帧。它会贪婪地选择第一个匹配项,因此您必须按相关值对包含子字符串的数据帧进行排序,以便匹配最高值。

以下代码为您的示例实现了这一点:

pattern = "|".join(df2.sort_values("Value", ascending=False).Substring)
result = df1.copy()
result.insert(
0, "Substring", df1["MainString"].str.extract("(" + pattern + ")", expand=False)
)

result = result.join(df2.set_index("Substring"), on="Substring")

关于Python - 在字符串列表中搜索子字符串列表,从另一个 Col 返回最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59289930/

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