如何使用组均值填充 df 中的 nan 值?

Posted

技术标签:

【中文标题】如何使用组均值填充 df 中的 nan 值?【英文标题】:How can i fill nan values in a df using group mean? 【发布时间】:2021-12-25 20:05:59 【问题描述】:

我可以根据下面的python代码为数值填充缺失的数据

df.fillna(df.select_dtypes(include='number').mean().iloc[0], inplace=True)

但这只会用整体平均值填充 Nan。我有一列包含分类变量,我需要根据此列中的类别填充平均值。

编辑:这是我正在处理的 df 的一部分。我想用按 TFOPWG 处置标签分组的各自列手段填充 NAN。

          TIC ID  TFOPWG Disposition  TESS Mag  TESS Mag err    RA  
TOI                                                                        
101.01  231663901                 KP   12.4069         0.006  318.737000   
102.01  149603524                 KP    9.7109         0.006   87.139833   
103.01  336732616                 KP   11.5232         0.008  312.457500   
104.01  231670397                 KP    9.8638         0.006  319.949708   
105.01  144065872                 KP    9.4995         0.006  337.457833   

              Dec  PM RA (mas/yr)  PM RA err (mas/yr)  PM Dec (mas/yr)  \
TOI                                                                      
101.01 -55.871864          12.641               0.044          -16.011   
102.01 -63.988328         -15.641               0.037           26.046   
103.01 -24.428694          10.426               0.070           15.620   
104.01 -58.148933          10.552               0.045          -10.658   
105.01 -48.003100          91.976               0.052           -6.861   

        Period (days)  Stellar Distance (pc)  Stellar Distance (pc) err  \
TOI                                                                       
101.01       1.430369                375.310                     4.4110   
102.01       4.411929                175.631                     0.5880   
103.01       3.547854                411.211                     7.7520   
104.01       4.087493                316.678                     2.9655   
105.01       2.184670                137.544                     0.7905   

        Stellar Eff Temp (K)  Stellar Eff Temp (K) err  \
TOI                                                      
101.01                5600.0                       NaN   
102.01                6280.0                       NaN   
103.01                6351.0                       NaN   
104.01                6036.0                       NaN   
105.01                5630.0                       NaN   

        Stellar log(g) (cm/s^2) err  Stellar Radius (R_Sun)  \
TOI                                                           
101.01                          NaN                0.890774   
102.01                          NaN                1.210000   
103.01                          NaN                1.400000   
104.01                          NaN                2.218670   
105.01                          NaN                1.240000   

        Stellar Radius (R_Sun) err  
TOI                                 
101.01                    0.043847  
102.01                    0.050000  
103.01                         NaN  
104.01                    0.102573  
105.01                    0.060000  

【问题讨论】:

请提供示例数据框,并提供预期输出 【参考方案1】:

您可以使用groupby().transform() 将组的平均值放在每一行,然后您可以fillna

df.fillna(df.groupby('category_column').transform('mean'), inplace=True)

【讨论】:

以上是关于如何使用组均值填充 df 中的 nan 值?的主要内容,如果未能解决你的问题,请参考以下文章

pandas如何使用groupby [duplicate]将NaN值替换为平均值

在pyspark中用平均值填充缺失值

熊猫:在每组中按平均值填充缺失值

熊猫:在每组中按平均值填充缺失值

如何使用连接来填充列的缺失值 - Python Pandas?

如何用平均值填充空值