0

我有一个数据框(df)并尝试将数据附加到特定行

Index Fruit Rank 0 banana 1 1 apple 2 2 mango 3 3 Melon 4

目标是将等级 1 的水果与每个等级进行比较,然后附加该值。我正在使用 difflib.SequenceMatcher 进行比较。现在我可以附加到 df 但我最终将相同的值附加到每一行。我正在为循环和追加而苦苦挣扎。任何指针将不胜感激。

这是我的一些代码:

new_entry = df[(df.Rank ==1)]
new_fruit = new_entry['Fruit']

prev_entry = df[(df.Rank ==2)]
prev_fruit = prev_entry['Fruit']


similarity_score = difflib.SequenceMatcher(None, str(new_fruit).lower(), str(prev_fruit).lower()).ratio()

df['similarity_score'] = similarity_score

结果是这样的:

Index Fruit Rank similarity_score 0 banana 1 0.3 1 apple 2 0.3 2 mango 3 0.3 3 Melon 4 0.3

期望的结果是:

Index Fruit Rank similarity_score 0 banana 1 n/a 1 apple 2 0.4 2 mango 3 0.5 3 Melon 4 0.6

谢谢。

4

1 回答 1

1

这不会给出您想要的相似度得分顺序,但它会计算SequenceMatcher与排名 1 值('banana')和每一行的比率并将其添加为一列。

import pandas as pd
import difflib

df = pd.DataFrame({'Fruit': ['banana', 'apple', 'mango', 'melon'],
                   'Rank': [1, 2, 3, 4]})

top = df['Fruit'][df.Rank == 1][0]
df['similarity_score'] = df['Fruit'].apply(lambda x: difflib.SequenceMatcher(
                                           None, top, x).ratio())
于 2014-06-24T22:59:20.603 回答