【问题标题】:Interpolation based on unique value in a data frame基于数据帧中唯一值的插值
【发布时间】:2021-08-12 08:21:27
【问题描述】:

我正在尝试使用插值(线性)来填充数据框中的缺失值。插值应分别应用于行组(具有​​相同的 id )。数据框示例如下:

   mdata:
       id   f1      f2   f3    f4     f5
       d1   34      3    5     nan    6
       d1   nan     4    6     9      7
       d1   37    nan    6     10     8
       d2   nan     7    8     1      32    
       d2   12      8   nan    45     56    
       d2   13      9    11    46     59    

鉴于上面的示例,我想对具有 id1、id2 等的行应用插值函数。我尝试将它们分组然后使用插值,但我的代码似乎有问题:

   mdata=[~mdata['id'].map(mdata.groupby('id').apply(mdata.interpolate(method 
   ='linear', limit_direction ='both')))] 

我想要的输出应该是这样的:

 output:
       id   f1      f2   f3    f4     f5
       d1   34      3    5      9    6
       d1   35.5    4    6     9      7
       d1   37      5    6     10     8
       d2   12     7     8     1      32    
       d2   12      8   9.5    45     56    
       d2   13      9    11    46     59
   

【问题讨论】:

    标签: python dataframe group-by interpolation


    【解决方案1】:

    你可以定义一个函数:

    def f(x):
        return x.interpolate(method ='linear', limit_direction ='both')
    
    #Finally:
    mdata=mdata.groupby('id').apply(f)
    

    通过匿名函数:

    mdata=(mdata.groupby('id')
                .apply(lambda x:x.interpolate(method ='linear', limit_direction ='both')))
    

    mdata的输出:

       id    f1   f2    f3    f4  f5
    0  d1  34.0  3.0   5.0   9.0   6
    1  d1  35.5  4.0   6.0   9.0   7
    2  d1  37.0  4.0   6.0  10.0   8
    3  d2  12.0  7.0   8.0   1.0  32
    4  d2  12.0  8.0   9.5  45.0  56
    5  d2  13.0  9.0  11.0  46.0  59
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-01
      • 1970-01-01
      • 2017-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多