преобразовать несколько столбцов для интерполяции / копирования пропущенных значений - PullRequest
0 голосов
/ 14 мая 2018

Я пытаюсь заполнить пропущенные значения в кадре данных pandas путем интерполяции или копирования последнего известного значения в группе (идентифицируемой trip).Мои данные выглядят так:

    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

Я нашел Панды интерполируют внутри группы , но мне нужно brake, чтобы просто скопировать из последнего известного, но speed вбыть интерполированным (мой фактический набор данных имеет 12 столбцов, каждый из которых нуждается в такой обработке)

1 Ответ

0 голосов
/ 14 мая 2018

Вы можете применять отдельные методы к каждому столбцу. Например:

# 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 в состоянии торможения, потому что не было "последнего известного значения" для первого ряда поездки, и немного NaNs по скорости, когда первые несколько рядов были NaN , Вы можете заменить их, как считаете нужным, на fillna()

...