将列中的每一行与同一列中的每一行进行比较,如果匹配率 > 90,则使用 python 中的模糊逻辑删除该行
Compare each row in column with every row in the same column and remove the row if match ratio is > 90 with fuzzy logic in python
用python中的模糊逻辑将列中的每一行与同一列中的每一行进行比较,如果匹配率 > 90,则删除该行。我尝试使用重复项删除,但有些行具有相同的内容和一些额外的信息。数据如下
print(df)
输出为:
Page no
0 Hello
2 Hey
3 Helloo
4 Heyy
5 Hellooo
我正在尝试将每一行与每一行进行比较,如果行与比率大于 90 的内容匹配,则使用模糊逻辑将其删除。预期输出是:
Page no
0 Hello
2 Hey
我试过的代码是:
def func(name):
matches = df.apply(lambda row: (fuzz.ratio(row['Content'], name) >= 90), axis=1)
print(matches)
return [i for i, x in enumerate(matches) if x]
func("Hey")
上面的代码只检查一行有一句嘿
谁能帮我写代码?这真的很有帮助
- 使用
itertools.combinations
获取值的所有组合
- 然后
apply()
fuzz.ratio()
- 分析结果和 select 与另一个组合不完全匹配的行
import pandas as pd
import io
import itertools
from fuzzywuzzy import fuzz
df = pd.read_csv(
io.StringIO(
""" Page_no
0 Hello
2 Hey
3 Helloo
4 Heyy
5 Hellooo"""
),
sep="\s+",
)
# find combinations that have greater than 80 match
dfx = pd.DataFrame(itertools.combinations(df["Page_no"].values, 2)).assign(
ratio=lambda d: d.apply(lambda t: fuzz.ratio(t[0], t[1]), axis=1)
).loc[lambda d: d["ratio"].gt(80)]
# exclude rows that have big match to another row...
df.loc[~df["Page_no"].isin(dfx[1])]
Page_no
0
Hello
2
Hey
用python中的模糊逻辑将列中的每一行与同一列中的每一行进行比较,如果匹配率 > 90,则删除该行。我尝试使用重复项删除,但有些行具有相同的内容和一些额外的信息。数据如下
print(df)
输出为:
Page no
0 Hello
2 Hey
3 Helloo
4 Heyy
5 Hellooo
我正在尝试将每一行与每一行进行比较,如果行与比率大于 90 的内容匹配,则使用模糊逻辑将其删除。预期输出是:
Page no
0 Hello
2 Hey
我试过的代码是:
def func(name):
matches = df.apply(lambda row: (fuzz.ratio(row['Content'], name) >= 90), axis=1)
print(matches)
return [i for i, x in enumerate(matches) if x]
func("Hey")
上面的代码只检查一行有一句嘿
谁能帮我写代码?这真的很有帮助
- 使用
itertools.combinations
获取值的所有组合 - 然后
apply()
fuzz.ratio()
- 分析结果和 select 与另一个组合不完全匹配的行
import pandas as pd
import io
import itertools
from fuzzywuzzy import fuzz
df = pd.read_csv(
io.StringIO(
""" Page_no
0 Hello
2 Hey
3 Helloo
4 Heyy
5 Hellooo"""
),
sep="\s+",
)
# find combinations that have greater than 80 match
dfx = pd.DataFrame(itertools.combinations(df["Page_no"].values, 2)).assign(
ratio=lambda d: d.apply(lambda t: fuzz.ratio(t[0], t[1]), axis=1)
).loc[lambda d: d["ratio"].gt(80)]
# exclude rows that have big match to another row...
df.loc[~df["Page_no"].isin(dfx[1])]
Page_no | |
---|---|
0 | Hello |
2 | Hey |