当前位置: 首页 > 知识库问答 >
问题:

蟒蛇熊猫平均值和加权平均值

凌蕴藉
2023-03-14

我是新来的。任何帮助都将不胜感激

这是我的原始数据:

         Feed  Close  Sector  Market_Cap
Date
2015-09-18 A   5.60  Property  50    
2015-09-21 A   5.60  Property  20    
2015-09-23 A   5.60  Property  30    
2015-09-18 ABC 0.67  Property  50    
2015-09-21 ABC 0.66  Property  80     
2015-09-18 DA  0.67  Mining    65    
2015-09-21 KK  1.66  Mining    80    

我想得到的是:

1创建一个新的列调用平均值,以计算每个提要的平均市值。

2求加权平均数。

This is what I want:
         Feed  Close  Sector   Market_Cap   Mean   Sector_WeightedAvg
Date
2015-09-18 A   5.60  Property  50           33.33      33.33/(33.33+65) 
2015-09-21 A   5.60  Property  20           33.33      33.33/(33.33+65)
2015-09-23 A   5.60  Property  30           33.33      33.33/(33.33+65)
2015-09-18 ABC 0.67  Property  50           65         65/(33.33+65)
2015-09-21 ABC 0.66  Property  80           65         65/(33.33+65) 
2015-09-18 DA  0.67  Mining    65           62         62/(62+80)
2015-09-21 KK  1.66  Mining    80           80         80/(62+80)

这是我当前的代码,我得到NaN:

df3= pd.DataFrame(df3)
df3['Mean'] = df3.groupby(by=['Sector'])[ Market_Cap].mean()  

         Feed  Close  Sector   Market_Cap   Mean   
Date
2015-09-18 A   5.60  Property  50           NaN       
2015-09-21 A   5.60  Property  20           NaN      
2015-09-23 A   5.60  Property  30           NaN      
2015-09-18 ABC 0.67  Property  50           NaN             

对于加权平均代码:

df2['WeightedAverage'] =df3[ Market_Cap].value /df3['Mean'].value

我得到了一个错误:

AttributeError:“Series”对象没有属性“value”

共有2个答案

易星纬
2023-03-14

尝试变换('和')的组合,均值

In [5]: df
Out[5]: 
   Close Feed  Market_Cap    Sector
0   5.60    A          50  Property
1   5.60    A          20  Property
2   5.60    A          30  Property
3   0.67  ABC          50  Property
4   0.66  ABC          80  Property
5   0.67   DA          65    Mining
6   1.66   KK          80    Mining

In [6]: g = df.groupby(['Sector', 'Feed'])

...

In [7]: c = g.Market_Cap.mean()

In [8]: c
Out[8]: 
Sector    Feed
Mining    DA      65.000000
          KK      80.000000
Property  A       33.333333
          ABC     65.000000
Name: Market_Cap, dtype: float64

In [9]: d = c.groupby(level=0).transform('sum')

In [10]: d
Out[10]: 
Sector    Feed
Mining    DA      145.000000
          KK      145.000000
Property  A        98.333333
          ABC      98.333333
dtype: float64

...

In [11]: df['Mean'] = df.apply(lambda x: c[x.Sector, x.Feed], axis=1)

In [12]: df['Weighted_Avg'] = df.apply(lambda x: c[x.Sector, x.Feed] / d[x.Sector, x.Feed], axis=1)

In [13]: df
Out[13]: 
   Close Feed  Market_Cap    Sector       Mean  Weighted_Avg
0   5.60    A          50  Property  33.333333      0.338983
1   5.60    A          20  Property  33.333333      0.338983
2   5.60    A          30  Property  33.333333      0.338983
3   0.67  ABC          50  Property  65.000000      0.661017
4   0.66  ABC          80  Property  65.000000      0.661017
5   0.67   DA          65    Mining  65.000000      0.448276
6   1.66   KK          80    Mining  80.000000      0.551724
令狐献
2023-03-14

IIUC可以使用变换均值

加权平均值为列平均值除以列平均值的唯一值之和,df3按列扇区分组。

print df3
          Feed  Close    Sector  Market_Cap
Date                                        
2015-09-18    A   5.60  Property          50
2015-09-21    A   5.60  Property          20
2015-09-23    A   5.60  Property          30
2015-09-18  ABC   0.67  Property          50
2015-09-21  ABC   0.66  Property          80
2015-09-18   DA   0.67    Mining          65
2015-09-21   KK   1.66    Mining          80

df3['Mean'] = df3.groupby(by=['Feed'])['Market_Cap'].transform('mean')   
df3['WeightedAverage'] = df3['Mean'] / df3.groupby(by=['Sector'])[ 'Mean'].transform(lambda x: sum(x.unique())) 
print df3
           Feed  Close    Sector  Market_Cap       Mean  WeightedAverage
Date                                                                    
2015-09-18    A   5.60  Property          50  33.333333         0.338983
2015-09-21    A   5.60  Property          20  33.333333         0.338983
2015-09-23    A   5.60  Property          30  33.333333         0.338983
2015-09-18  ABC   0.67  Property          50  65.000000         0.661017
2015-09-21  ABC   0.66  Property          80  65.000000         0.661017
2015-09-18   DA   0.67    Mining          65  65.000000         0.448276
2015-09-21   KK   1.66    Mining          80  80.000000         0.551724
 类似资料:
  • 问题内容: 我无法获得熊猫列的平均值或均值。有一个数据框。我在下面尝试的任何事情都没有给我该列的平均值 以下返回几个值,而不是一个: 这样: 问题答案: 如果您只想要列的均值,请选择列(这是一个系列),然后调用:

  • 我不能得到熊猫的平均值或平均值。有一个数据框。下面我尝试的东西都没有给我列的平均值 以下内容返回多个值,而不是一个值: 这也是:

  • 问题内容: 我有下表。我想根据以下公式计算按每个日期分组的加权平均值。我可以使用一些标准的常规代码来执行此操作,但是假设此数据在pandas数据框中,是否有比通过迭代更简单的方法来实现此目的? 2012年1月1日w_avg = 0.5 (60 / sum(60,80,100))+ .75 (80 / sum(60,80,100))+ 1.0 *(100 / sum(60,80,100)) 2012

  • 问题内容: 我有一个数据框 我需要的是Adjusted_lots,price和ajusted_lots的加权平均价格之和,并按所有其他列进行分组,即。按(合同,月,年和购买)分组 R的类似解决方案是使用dplyr通过以下代码实现的,但是在熊猫中却无法做到这一点。 groupby或任何其他解决方案是否可能相同? 问题答案: 编辑: 更新聚合,以便它与熊猫的最新版本一起使用 要将多个函数传递给grou

  • 问题内容: 我有一个这样的数据框: 如下所示,数据集不一定每天都有观察值: 我想添加一个新列,该列显示至少n天中每个用户过去n天(在这种情况下,n = 2)的平均值,否则它将有价值。例如,在John上得到一个,因为他没有和的数据。因此结果将是这样的: 在阅读了论坛中的几篇文章之后,我似乎应该结合使用和自定义,但是我还不太清楚该怎么做。 问题答案: 我认为您可以使用第一个convert列 ,然后通过

  • 问题内容: 我正在写一个使用numpy中的卷积函数的移动平均函数,它应该等效于(加权移动平均)。当我的权重全部相等时(如简单的算术平均值),它可以正常工作: 给 但是,当我尝试使用加权平均值时 而不是(对于相同的数据)3.667,4.667,5.667,6.667,…我希望,我得到 如果删除“有效”标志,则什至看不到正确的值。我真的很想对WMA和MA使用convolve,因为它可以使代码更整洁(相