将类似的字符串合并到pandas列中

时间:2019-09-11 13:52:42

标签: python string pandas dataframe fuzzywuzzy

我有熊猫交叉表数据框,看起来像这样:enter image description here

这是整个数据帧的一小部分样本。如您所见,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

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

1 个答案:

答案 0 :(得分:0)

这不是一个通用的解决方案,但是它应该给您一个解决方案:使用某些函数对您的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