我想按“代码”列对数据框进行分组,但仅当“名称”中的值明显不同时。
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
如何将条件放入分组依据?
您应该可以通过groupby().apply().agg()
实现它-在apply()中使用SequenceMatcher。我现在无法使用笔记本电脑,一旦我回来,我会尝试让您知道。