这是整个数据帧的一小部分样本。如您所见,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
由于我是初学者,请帮助我,我们如何实现这一目标。
答案 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