基于数据框中唯一值的插值

Interpolation based on unique value in a data frame

我正在尝试使用插值(线性)来填充数据框中的缺失值。插值应分别应用于行组(具有​​相同的 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
   

你可以定义一个函数:

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