Pandas将每一行与数据框中的所有行进行比较,并将结果保存在列表中

2024-10-03 02:35:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着将每一行与熊猫DF through中的所有行进行比较fuzzyfuzzy.fuzzy.partial_比率()>;=85,并将结果写入每行的列表中。在

in: df = pd.DataFrame( {'id':[1, 2, 3, 4, 5, 6], 'name':['dog', 'cat', 'mad cat', 'good dog', 'bad dog', 'chicken']})

使用带有fuzzyfuzzy库的pandas函数获得结果:

^{pr2}$

但我不明白怎么弄到的。在


Tags: ingtiddataframedf列表partialfuzzy
1条回答
网友
1楼 · 发布于 2024-10-03 02:35:01

第一步是找到与给定的name条件匹配的索引。由于partial_ratio只接受字符串,所以我们apply将其放入数据帧:

name = 'dog'
df.apply(lambda row: (partial_ratio(row['name'], name) >= 85), axis=1)

然后我们可以使用enumerate和列表理解来生成布尔数组中true索引的列表:

^{pr2}$

让我们把这些放在函数中:

def func(name):
    matches = df.apply(lambda row: (partial_ratio(row['name'], name) >= 85), axis=1)
    return [i for i, x in enumerate(matches) if x]

我们现在可以将该函数应用于整个数据帧:

df.apply(lambda row: func(row['name']), axis=1)

相关问题 更多 >