熊猫用给定分组的平均值替换nan

卡尔

我有一个形式的大数据集:

    period_id  gic_subindustry_id  operating_mgn_fym5  operating_mgn_fym4  317        201509            25101010           13.348150           11.745965   
682        201509            20101010           10.228725           10.473917   
903        201509            20101010           NaN                 17.700966   
1057       201509            50101010           27.858305           28.378040   
1222       201509            25502020           15.598956           11.658813   
2195       201508            25502020           27.688324           22.969760   
2439       201508            45202020           NaN                 27.145216   
2946       201508            45102020           17.956425           18.327724 

实际上,在过去25年中,我每年都有成千上万个值,并且有多个(10+)列。

我正在尝试使用该时间段的gic_industry_id中位数/平均值替换NaN值。

我尝试了一些方法

df.fillna(df.groupby('period_id','gic_subindustry_id')。transform('mean')),但这似乎非常缓慢(我在几分钟后将其停止了)。

我想到它之所以变慢的原因是由于重新计算了遇到的每个NaN的平均值。为了解决这个问题,我认为计算每个period_id的平均值,然后使用此值替换/映射每个NaN可能会快得多。

means = df.groupby(['period_id', 'gic_subindustry_id']).apply(lambda x:x.mean())

输出:

                             operating_mgn_fym5  operating_mgn_fym4 operating_mgn_fym3 operating_mgn_fym2   
period_id gic_subindustry_id                                             
201509    45202030            1.622685  0.754661   0.755324  321.295665  
          45203010            1.447686  0.226571   0.334280   12.564398  
          45203015            0.733524  0.257581   0.345450   27.659407  
          45203020            1.322349  0.655481   0.468740   19.823722  
          45203030            1.461916  1.181407   1.487330   16.598534  
          45301010            2.074954  0.981030   0.841125   29.423161  
          45301020            2.621158  1.235087   1.550252   82.717147  

实际上,这要快得多(30-60秒)。

但是,我正在努力弄清楚如何将NaN映射到这些方法。确实,这是执行此映射的“正确”方法吗?速度实际上并不是最重要的,但是少于60秒将是不错的选择。

博维尔上校

如果fillna数据框具有相同的结构(由提供as_index=False,则可以使用分组依据的结果

df.fillna(df.groupby(['period_id', 'gic_subindustry_id'], as_index=False).mean())

#In [60]: df
#Out[60]: 
#   period_id  gic_subindustry_id  operating_mgn_fym5  operating_mgn_fym4
#0     201508            25502020           27.688324           22.969760
#1     201508            45102020           17.956425           18.327724
#2     201508            45202020                 NaN           27.145216
#3     201509            20101010           10.228725           14.087442
#4     201509            25101010           13.348150           11.745965
#5     201509            25502020           15.598956           11.658813
#6     201509            50101010           27.858305           28.378040
#7     201508            45102020           17.956425           18.327724

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

熊猫用平均值替换列的值

来自分类Dev

熊猫:如何计算分组平均值

来自分类Dev

在熊猫中使用值之前和之后的平均值分组并填充NaN

来自分类Dev

用熊猫计算每日平均值

来自分类Dev

如何用行平均值替换熊猫数据透视表的0和nan值?

来自分类Dev

如何用熊猫DataFrame中的先前值和后继值的平均值替换NaN?

来自分类Dev

按列分组并获取分组熊猫的平均值

来自分类Dev

用滚动平均值或其他插值替换NaN或缺失值

来自分类Dev

将列表按给定元素分组并计算平均值

来自分类Dev

熊猫-比较给定日期范围内小时平均值的平均值

来自分类Dev

使用熊猫计算给定频率的数据帧的平均值

来自分类Dev

查找熊猫数据框分组行的平均值

来自分类Dev

分组并计算平均值并计算熊猫的大小

来自分类Dev

熊猫MultiIndex Dataframe滚动平均值分组

来自分类Dev

在 MATLAB 中用其他值(平均值)替换 NaN

来自分类Dev

用Javascript计算分组后的平均值

来自分类Dev

分组滚动平均值

来自分类Dev

SQL 分组平均值

来自分类Dev

用 NaN 更新列,过滤行的平均值

来自分类Dev

用按因子分组的同一列的平均值替换 data.table 列中的 NA

来自分类Dev

Python Numpy:用平均值替换重复值

来自分类Dev

用R中的apply替换循环的滚动平均值

来自分类Dev

用环境值的平均值替换缺失的值

来自分类Dev

用平均值替换NA-s

来自分类Dev

用R中的apply替换循环的滚动平均值

来自分类Dev

熊猫窗口平均值

来自分类Dev

熊猫数据框:用该行的均值替换nan

来自分类Dev

R中的分组移动平均值

来自分类Dev

SQL:分组,计数和平均值