转换多列以插入/复制缺失值

时间:2018-05-13 21:25:55

标签: python pandas

我试图通过插入或复制组中的最后已知值(由trip标识)来填充pandas数据帧中的缺失值。我的数据如下:

    brake   speed   trip
0   0.0     NaN     1
1   1.0     NaN     1
2   NaN     1.264   1
3   NaN     0.000   1
4   0.0     NaN     1
5   NaN     1.264   1
6   NaN     6.704   1
7   1.0     NaN     1
8   0.0     NaN     1
9   NaN     11.746  2
10  1.0     NaN     2
11  0.0     NaN     2
12  NaN     16.961  3
13  1.0     NaN     3
14  NaN     11.832  3
15  0.0     NaN     3
16  NaN     17.082  3
17  NaN     22.435  3
18  NaN     28.707  3
19  NaN     34.216  3

我找到了Pandas interpolate within a groupby,但我需要brake简单地从最后一个已知的,speed进行内插复制(我的实际数据集有12列,每个都需要这样的处理)

1 个答案:

答案 0 :(得分:1)

您可以对每列应用单独的方法。例如:

# interpolate speed
df['speed'] = df.groupby('trip').speed.transform(lambda x: x.interpolate())
# fill brake with last known value 
df['brake'] = df.groupby('trip').brake.transform(lambda x: x.fillna(method='ffill'))

>>> df
    brake    speed  trip
0     0.0      NaN     1
1     1.0      NaN     1
2     1.0   1.2640     1
3     1.0   0.0000     1
4     0.0   0.6320     1
5     0.0   1.2640     1
6     0.0   6.7040     1
7     1.0   6.7040     1
8     0.0   6.7040     1
9     NaN  11.7460     2
10    1.0  11.7460     2
11    0.0  11.7460     2
12    NaN  16.9610     3
13    1.0  14.3965     3
14    1.0  11.8320     3
15    0.0  14.4570     3
16    0.0  17.0820     3
17    0.0  22.4350     3
18    0.0  28.7070     3
19    0.0  34.2160     3

请注意,这意味着你在制动器中保留了一些NaN,因为行程的第一行没有“最后已知的值”,而前几行的速度有一些NaNsNaN。您可以根据需要使用fillna()

替换这些内容