以两个字符串之间的相似性度量为条件的数据帧分组

问题描述 投票:0回答:1

我想按“代码”列对数据框进行分组,但仅当“名称”中的值明显不同时。

d = {'code': ['ABC', 'ABC','DB','DB','CDP'], 'name': ['abcde','abc de', 'defs','wokj','lkj']}
df = pd.DataFrame(data=d)
print(df)

  code    name
0  ABC   abcde
1  ABC  abc de
2   DB    defs
3   DB    wokj
4  CDP     lkj

所以会像

df2 = df.groupby(['code']).agg(name = ('name', (' + '.join))).reset_index()
print(df2)

 code            name
0  ABC  abcde + abc de
1  CDP             lkj
2   DB     defs + wokj

但ABC不应分组,并根据类似下面的情况保留为单独的行值

from difflib import SequenceMatcher

def similar(a, b):
    return SequenceMatcher(None, a, b).ratio()

print(similar('abcde', 'abc de'))
print(similar('defs', 'wokj'))

0.9090909090909091
0.0

我想要的最终结果是

 code            name
0  ABC          abcde
1  ABC         abc de
1  CDP             lkj
2   DB     defs + wokj

如何将条件放入分组依据?

python pandas dataframe pandas-groupby similarity
1个回答
0
投票

您应该可以通过groupby().apply().agg()实现它-在apply()中使用SequenceMatcher。我现在无法使用笔记本电脑,一旦我回来,我会尝试让您知道。

© www.soinside.com 2019 - 2024. All rights reserved.