У меня есть большой фрейм данных (цены), который содержит длинное описание и цену, связанную с этим описанием. Я сгенерировал другой фрейм данных (слова), в котором хранятся все уникальные слова, которые есть в этих длинных описаниях. Я пытаюсь вычислить сумму цены конкретного слова из фрейма данных цен и затем сохранить его в фрейме слова, в той же строке, в которой находится слово.
Я получил следующее решение:
matches = (
prices['TEXT'].str.extractall(f'({"|".join(words["WORD"])})')
.rename(columns={0:'WORDS'})
.rename_axis(['index', 'match'])
)
final = (
prices.rename_axis('index')
.join(matches)
.groupby('WORDS', sort=False)['PRICE'].sum()
.reset_index(name='SUM_PRICE')
)
, но вывод неправильный для суммы (например, общая сумма столбца равна 19,6, поэтому никакая условная сумма не должна быть выше, тем не менее она вычисляет 25,5 для слова 'VINO' ):
WORDS MEAN_PRICE
0 VINO 25.5
1 ESPUMOSO 20.4
2 ROSE 13.3
3 GRADO 15.7
4 ALCOHOLICO 15.7
пример кадра данных:
prices = pd.DataFrame({'TEXT': ['VINO ESPUMOSO ROSE GRADO ALCOHOLICO 11.8 ACIDEZ VOLATIL 0.37 COSECHA 2013 EN CAJAS DE 06X750 ML SIN EMBALAR', 'VINO CON DENOMINACION DE ORIGEN ESPUMOSO SPARKLING ANGEL BRUT GRADO ALCOHOLICO 12.0 06BOTELLAS EN ENVASE DE 750 ML SIN EMBALAR', 'VINO ESPUMOSO CHARDONNAY PINOT NOIR EXTRA BR DE UVA, GR.ALC.12.80, ACIDEZ VOL. 0.46 G/L.,CAJAS DE 6 BOLTELLAS DE 750 ML. SIN EMBALAR', 'VINO PINOT NOIR ROSE BRUT GA 12.0 AV 0.45 COSECHA 2013 CON DENOMINACION DE ORIGEN EN CAJAS CON BOTELLAS DE 6X750CC SIN EMBALAR', 'VINO ESPUMOSO ROSE GRADO ALCOHOLICO 11.8 ACIDEZ VOLATIL 0.37 COSECHA 2013 EN CAJAS DE 06X750 ML SIN EMBALAR VINO CON DENOMINACION DE ORIGEN ESPUMOSO SPARKLING ANGEL BRUT GRADO ALCOHOLICO 12.0 06BOTELLAS EN ENVASE DE 750 ML SIN EMBALAR VINO ESPUMOSO CHARDONNAY PINOT NOIR EXTRA BR DE UVA, GR.ALC.12.80, ACIDEZ VOL. 0.46 G/L.,CAJAS DE 6 BOLTELLAS DE 750 ML. SIN EMBALAR VINO PINOT NOIR ROSE BRUT GA 12.0 AV 0.45 COSECHA 2013 CON DENOMINACION DE ORIGEN EN CAJAS CON BOTELLAS DE 6X750CC SIN EMBALAR'],
'PRICE': [6.33, 5.43, 2.79, 3.07, 1.96]})
words = pd.DataFrame({'WORD':['VINO', 'ESPUMOSO', 'ROSE', 'GRADO', 'ALCOHOLICO', '11.8', 'ACIDEZ', 'VOLATIL', '0.37', 'COSECHA', '2013', 'EN', 'CAJAS', 'DE', '06X750', 'ML', 'SIN', 'EMBALAR', 'CON', 'DENOMINACION', 'ORIGEN', 'SPARKLING', 'ANGEL', 'BRUT', '12.0', '06BOTELLAS', 'ENVASE', '750', 'CHARDONNAY', 'PINOT', 'NOIR', 'EXTRA', 'BR', 'UVA,', 'GR.ALC.12.80,', 'VOL.', '0.46', 'G/L.,CAJAS', '6', 'BOLTELLAS', 'ML.', 'GA', 'AV', '0.45', 'BOTELLAS', '6X750CC', ]})
Большое спасибо!