迭代每个 Pandas df 行并确定行值是否在列表中,如果是,则将该值拉入 df

Iterate each Pandas df row and identify if row value is in list, if so pull that value into df

我有一个 pandas df,其中包含世界各州的手动输入值。我有一个格式正确且包含正确语法的状态值列表。我想遍历 pandas df 中的每一行,并将每行的值与状态列表中的所有值进行比较,以确定该行中的值是否包含在任何字符串值中。如果是这样,将该值从字符串中提取到名为“匹配”的新 df 列。如果 pandas 行包含多个字符串值,则将这两个值都引入并让它创建一个列表。下面是我的意思的一个例子。

注意:我已经可以使用 difflib get_close_matches 函数来做到这一点。发布了下面的代码并为此输出,想要一种方法来复制它,但是为了 pandas.

中的 str.contains() 能力

states_list = ['Oregon', 'Texas', 'Colorado', 夏威夷, 'Sonora', 'Alaska'、'Alabama'、'Accra'、等等]

结果

我如何使用 get close matches 来 select 与下面输入的状态值最接近的匹配。想要添加另一列,其中包含来自状态列表的值,行值字符串包含在

尝试以下操作:

s = set([i.lower() for i in states_list])

df['match'] = df['state_name'].apply(lambda x: list(set([i.strip().lower() for i in x.split(',')]).intersection(
s)))

df['match']=df['match'].apply(lambda x: [i[0].upper() + i[1:] for i in x])