【发布时间】:2020-08-04 17:49:06
【问题描述】:
我有一个大型数据框(价格),其中包含一个长描述和与该描述相关的价格。 我生成了另一个数据框(单词),它保留了那些长描述所具有的所有唯一单词。我要做的是从价格数据框中获取特定单词的平均价格,然后将其存储在单词数据框中,与单词在同一行中。
我设法获得了特定单词的平均值,但是当我尝试循环遍历单词数据帧时,它花费了太多时间。
这适用于单个值:
prices.loc[prices['TEXT'].str.contains("PREMIUM", na=False)]['PRICE'].mean()
这是我尝试运行的循环:
for ind in words.index:
words['avgs'][ind]=prices.loc[prices['TEXT'].str.contains(words['WORD'][ind], na=False)]['PRICE'].mean()
示例数据框:
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', ]})
有什么方法可以让这段代码更快? 谢谢!
【问题讨论】:
-
在我看来,您需要做的就是 price['MeanForText']=prices.groupby('TEXT')['PRICE'].transform('mean') 并切片或选择每个文字单词?
-
感谢您的回复,但是您如何检查价格数据框中的文本中是否包含该单词?
-
是否可以添加小的示例数据框?
-
取决于,发布数据框示例。有多种方法可以找出答案。
-
我发布并编辑了示例,感谢您的帮助!