gpt4 book ai didi

python - 如果列包含存储在另一个数据框中的字符串,则计算该列的总和

转载 作者:行者123 更新时间:2023-12-04 04:13:05 24 4
gpt4 key购买 nike

我有一个大型数据框(价格),其中包含很长的描述以及与该描述相关的价格。我生成了另一个数据框(单词),它保留了那些长描述所具有的所有唯一单词。我想要做的是计算价格数据框中特定单词的价格总和,然后将其存储在单词数据框中,与该单词位于同一行。

我得到了以下解决方案:

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,因此没有条件总和应该更高,但对于单词“VINO”它仍然计算为 25.5):

    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', ]})

非常感谢!

最佳答案

自从我回答了你的最后一个问题后,我很容易看出问题所在。你得到更高总和的原因是因为一个词可以在一个句子中多次出现。所以在 GroupBy 之前使用 DataFrame.drop_duplicates:

matches = (
prices['TEXT'].str.extractall(f'({"|".join(words["WORD"])})')
.rename(columns={0:'WORDS'})
.rename_axis(['index', 'match'])
)

final = (
prices.rename_axis('index')
.join(matches)
.drop_duplicates()
.groupby('WORDS', sort=False)['PRICE'].sum()
.reset_index(name='SUM_PRICE')
)

WORDS SUM_PRICE
0 VINO 19.58
1 ESPUMOSO 16.51
2 ROSE 11.36
3 GRADO 13.72
4 ALCOHOLICO 13.72
5 11.8 8.29
6 ACIDEZ 11.08
7 VOLATIL 8.29
8 0.37 8.29
9 COSECHA 11.36
10 2013 11.36
11 EN 16.79
12 CAJAS 11.36
13 DE 19.58
14 06X750 8.29
15 ML 16.51
16 SIN 19.58
17 EMBALAR 19.58
18 CON 10.46
19 ORIGEN 10.46
20 SPARKLING 7.39
21 ANGEL 7.39
22 BRUT 10.46
23 12.0 10.46
24 06BOTELLAS 7.39
25 750 13.25
26 CHARDONNAY 4.75
27 PINOT 7.82
28 NOIR 7.82
29 EXTRA 4.75
30 BR 4.75
31 UVA, 4.75
32 GR.ALC.12.80, 4.75
33 VOL. 4.75
34 0.46 4.75
35 G/L.,CAJAS 4.75
36 6 7.82
37 BOLTELLAS 4.75
38 GA 5.03
39 AV 5.03
40 0.45 5.03
41 BOTELLAS 5.03

关于python - 如果列包含存储在另一个数据框中的字符串,则计算该列的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61376188/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com