【问题标题】:Merge similar strings together in pandas column在 pandas 列中将相似的字符串合并在一起
【发布时间】:2019-09-11 13:52:42
【问题描述】:

我有 pandas 交叉表数据框,如下所示:

这是整个数据框的一个小样本。如您所见, sku1_entity 有一些字符串,例如 4 Cheese W Verm、4 Cheese w Verm、4Cheese w Verm,类似地,在整个数据框中还有更多这样的情况。相应地,我们对每一行都有 0.0 和 1.0 值。我想合并这些相似的字符串(可能基于相似度分数)并将相应的 0.0 和 1.0 值合并。

因此 0.0 和 1.0 的输出将类似于(对于 4 Cheese W Verm):

0.0 = 6 +55 + 3 = 64 1.0 = 6 + 60 + 4 = 70

由于我是初学者,请帮助我如何实现这一目标。

【问题讨论】:

    标签: python string pandas dataframe fuzzywuzzy


    【解决方案1】:

    不是一个通用的解决方案,但它应该让您知道如何解决它:使用一些函数来“规范化”您的 sku1_entity 列并像这样对这些规范化值进行分组:

    df = pd.DataFrame( {'sku1_entity': ['4 Cheese W Verm','4 Cheese w Verm','4Cheese w Verm', 'something else'], '0.0': [6,55,3,1], '1.0': [0,5,1,0]})
    df = df.set_index('sku1_entity')
    df['All'] = df['0.0'] + df['1.0']
    def grouper(x):
        return ''.join(x.lower().split())
    df.groupby(grouper).sum()
    

    结果:

                   0.0  1.0  All
    4cheesewverm    64    6   70
    somethingelse    1    0    1
    

    作为替代方案,您当然可以在首先创建数据透视表之前“规范化”列。


    如果你想保留原来的 sku1_entity 名字,你可以这样做:
    df = pd.DataFrame( {'sku1_entity': ['4 Cheese W Verm','4 Cheese w Verm','4Cheese w Verm', 'something else'], '0.0': [6,55,3,1], '1.0': [0,5,1,0]})
    df['sku1_entity_norm'] = df['sku1_entity'].str.lower().str.split().map(''.join)
    
    df.groupby('sku1_entity_norm').agg({'sku1_entity': list, '0.0': sum, '1.0': sum})
    

    结果:

                                                             sku1_entity  0.0  1.0
    sku1_entity_norm                                                              
    4cheesewverm      [4 Cheese W Verm, 4 Cheese w Verm, 4Cheese w Verm]   64    6
    somethingelse                                       [something else]    1    0
    

    【讨论】:

      猜你喜欢
      • 2021-12-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-23
      • 2019-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-06
      相关资源
      最近更新 更多