我有一个大数据框(prices),它包含一个长描述和一个与该描述相关联的价格。我生成了另一个数据框(单词),它保存了那些长描述中的所有唯一单词。我试图做的是从prices数据框中获取特定单词的平均价格,然后将其存储在单词dataframe中,与单词所在的行相同。
我设法获得了一个特定单词的平均值,但当我尝试在单词数据框中循环时,它花费了太多的时间。
这适用于单个值:
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', ]})
有没有办法让这段代码更快?谢谢
最简单的方法是使用Series.str.extractall
,然后将提取内容连接到index
上,最后使用GroupBy.mean
:
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'].mean()
.reset_index(name='MEAN_PRICE')
)
输出
print(final)
WORDS MEAN_PRICE
0 VINO 3.182500
1 ESPUMOSO 3.405000
2 ROSE 3.330000
3 GRADO 3.920000
4 ALCOHOLICO 3.920000
5 11.8 4.145000
6 ACIDEZ 3.260000
7 VOLATIL 4.145000
8 0.37 4.145000
9 COSECHA 3.330000
10 2013 3.330000
11 EN 3.512500
12 CAJAS 3.330000
13 DE 2.990000
14 06X750 4.145000
15 ML 3.405000
16 SIN 3.182500
17 EMBALAR 3.182500
18 CON 2.908333
19 ORIGEN 3.105000
20 SPARKLING 3.695000
21 ANGEL 3.695000
22 BRUT 3.105000
23 12.0 3.105000
24 06BOTELLAS 3.695000
25 750 2.861667
26 CHARDONNAY 2.375000
27 PINOT 2.445000
28 NOIR 2.445000
29 EXTRA 2.375000
30 BR 2.375000
31 UVA, 2.375000
32 GR.ALC.12.80, 2.375000
33 VOL. 2.375000
34 0.46 2.375000
35 G/L.,CAJAS 2.375000
36 6 2.445000
37 BOLTELLAS 2.375000
38 GA 2.515000
39 AV 2.515000
40 0.45 2.515000
41 BOTELLAS 2.515000
我有一个大数据框(prices),它包含一个长描述和一个与该描述相关联的价格。我生成了另一个数据框(单词),它保存了那些长描述中的所有唯一单词。我要做的是从prices数据框计算一个特定单词的价格之和,然后将其存储在单词dataframe中,与单词所在的行相同。 我得到了以下解决方案: 但输出不适合求和(例如,列的总和为19.6,因此任何条件求和都不应高于此值,但它对“VINO”一词的计算结果为2
用其他dataframe的列值替换dataframe的一列中的nan值时出现问题。下面是一个测试示例: 我想用其他dataframe中的特定值替换列名中的Nan值(如果其中有一些Nan值,则不是其他列),例如此dataframe中的Name2值: 我想得到的是: 这是此示例的测试代码: 然后我尝试了这三种方法,但都不起作用——我的数据帧始终保持Nan值。 你能告诉我哪里出错了吗?
我有两个数据帧,如下所示- 我想检查在df1中的sym1是否存在于df2的sym2列中,如果存在,我想提取该行的名称,并将其添加到df1中作为新的列new_col。 为此,我尝试了下面的代码片段,它也在工作,但对于我的长数据帧,它不工作。我面临以下错误和警告消息- 代码片段- 如何从df2中获取这些名称列,并在df1中为特定行创建新的列?
我在spark dataframe中有一个包含文本的列。 我想提取所有以特殊字符开头的单词,我正在使用从该文本列的每一行中提取。如果文本包含以开头的多个单词,则只返回第一个单词。 我正在寻找提取多个符合我在火花模式的单词。 样本输入:< code>@always_nidhi @YouTube不,我不明白,但我喜欢他们的音乐和舞蹈真棒这首mve的所有歌曲都很摇滚 示例输出:
情况: 两个数据帧(df1和df2)具有相同的三个索引,例如“A”、“B”、“C”。df1和df2的列数不同。df1和df2中的所有单元格都填充了float类型的数据。 DF1: DF2: 目标: 从df2中选择的列(例如“BBB”)与df1的每列相加后,结果应存储在新的数据帧(df_new)中。df_new的格式应为df1(列数和行数),并具有与df1相同的列名和索引。 new_df: 我的做法
我有两个数据帧df1和df2 df1如下 df2就像 我想根据df2中与df1中的列名匹配的单元格值将值从df1复制到df2,所以我的df3应该看起来像 df3 基本上,我想根据df2的单元格值(df1中的列名)从df1复制df2中的列 如果它仍然令人困惑,请告诉我