2016-04-03 5 views
2

У меня есть фрейм данных в пандах с несколькими столбцами, которые я хочу переслать, заполнить значения. На данный момент я делаю:Переслать все за исключением последнего значения в python pandas dataframe

columns = ['a', 'b', 'c'] 
for column in columns: 
    df[column].fillna(method='ffill', inplace=True) 

... но из-за серии в колонках различной длины, что оставляет длинные хвосты заполненных значений на концах некоторых из них. Поскольку пробелы в некоторых сериях довольно велики, я не могу использовать предельный параметр fillna без оставления длинных хвостов заполненных значений в серии.

Можно ли пересылать значения в каждом столбце, кроме последнего значения? Благодаря!

+0

Я думаю, что это возможно с использованием маски, содержащей все значения до последнего 'NaN', но не могли бы вы предоставить пример набора данных для воспроизведения? –

ответ

3

Вы можете использовать last_valid_index в функции лямбда, чтобы просто заполнить эту точку.

df = pd.DataFrame({ 
    'A': [1, None, None, None], 
    'B': [1, 2, None, None], 
    'C': [1, None, 3, None], 
    'D': [1, None, None, 4]}) 

>>> df 
    A B C D 
0 1 1 1 1 
1 NaN 2 NaN NaN 
2 NaN NaN 3 NaN 
3 NaN NaN NaN 4 

>>> df.apply(lambda series: series.loc[:series.last_valid_index()].ffill()) 
    A B C D 
0 1 1 1 1 
1 NaN 2 1 1 
2 NaN NaN 3 1 
3 NaN NaN NaN 4 
Смежные вопросы