首页 > 解决方案 > 我试图获取两列中两个字符串之间的距离并将结果放在下一个第三列,但为什么它对所有人产生相同的结果?

问题描述

这是我的数据框:

    RIGHT_SHORTNAME     Item_Name
0   S/BAG PKT SEMBAKO   S/BAG PKT SEMBAKO
1   ORAL B 123 SOFT2S   ORAL B 123 SOFT2S
2   ORAL B 123 SOFT2S   ORAL B 123 SOFT2S
3   CINDERELLA COTBUD   CINDERELLA COTBUD
4   PROCHIZ 10S 170GR   PROCHIZ 10S 170GR
... ... ...
97163   TT MAX CHO 12X17GR  TT MAX CHO 12X17GR
97164   ICELAND VOD 350ML   ICELAND VOD 350ML
97165   SUNKIST GUAVA 1 LT  SUNKIST GUAVA 1 LT
97166   COSM FAN 12DAR  COSM FAN 12DAR
97167   BATHSALT MINERAL C  BATHSALT MINERAL C

我想用这段代码添加列名“距离”:

def distance(a, b):
    _, z, _=process.extractOne(str(a),[str(b)])
    return z
df['distance']=distance(df['RIGHT_SHORTNAME'],df['Item_Name'])

它产生了这个:

    RIGHT_SHORTNAME     Item_Name           distance
0   S/BAG PKT SEMBAKO   S/BAG PKT SEMBAKO   98.595506
1   ORAL B 123 SOFT2S   ORAL B 123 SOFT2S   98.595506
2   ORAL B 123 SOFT2S   ORAL B 123 SOFT2S   98.595506
3   CINDERELLA COTBUD   CINDERELLA COTBUD   98.595506
4   PROCHIZ 10S 170GR   PROCHIZ 10S 170GR   98.595506
... ... ... ...
97163   TT MAX CHO 12X17GR  TT MAX CHO 12X17GR  98.595506
97164   ICELAND VOD 350ML   ICELAND VOD 350ML   98.595506
97165   SUNKIST GUAVA 1 LT  SUNKIST GUAVA 1 LT  98.595506
97166   COSM FAN 12DAR  COSM FAN 12DAR  98.595506
97167   BATHSALT MINERAL C  BATHSALT MINERAL C  98.595506

当我使用 df['distance'].describe() 检查时,结果 df['distance'] 完全一样。有谁能够帮我?

标签: pythonpandasrapidfuzz

解决方案


这是因为您的distance方法仅返回一个值,并且您将该值分配给数据框中的新列distance。因此,该distance列具有distance方法返回的所有相同值。

process.extractOne(query, choices)接受一个字符串和一个列表,我猜你想遵循语法

def distance(x):
    _, z = process.extractOne(x, df['Item_Name'].tolist())
    return z

df['distance'] = df['RIGHT_SHORTNAME'].apply(distance)

或者

df['distance'] = df['RIGHT_SHORTNAME'].apply(lambda x: process.extractOne(x, df['Item_Name'].tolist())[1])

推荐阅读