Вставка значения из предыдущей ячейки

#python #pandas #dataframe #loops

#python #панды #фрейм данных #циклы

Вопрос:

Я использую Pandas для управления таблицей. Мне нужно заменить повторяющиеся поля ‘….’ на предыдущее значение

Код
Азбука
….
….
….
123
….
….
….

Должно быть

Код
Азбука
Азбука
Азбука
Азбука
123
123
123
123

Я думаю, что это что-то вроде df[‘Code’] == df[‘Code’].shift().fillna(-1), но не могу понять, как это сделать строка за строкой (9000 строк)

Спасибо

Ответ №1:

Замените .... на пропущенные значения NaN s, а затем перенаправьте заполнение предыдущих отсутствующих значений:

 df['Code'] = df['Code'].replace('....', np.nan).ffill()
 

Редактировать:

Значение пытается быть установлено на копии фрагмента из фрейма данных. Попробуйте вместо этого использовать .loc[row_indexer,col_indexer] = value

означает, что в некоторых строках раньше использовалась фильтрация, если вы измените значения df позже, вы обнаружите, что изменения не распространяются обратно на исходные данные ( df1 ), и что Pandas выдает предупреждение:

 df = df1[df1['col'] == 1]

df['Code'] = df['Code'].replace('....', np.nan).ffill()
 

Решение заключается в использовании DataFrame.copy :

 df = df1[df1['col'] == 1].copy()

df['Code'] = df['Code'].replace('....', np.nan).ffill()
 

Комментарии:

1. Спасибо — однако он выдает ошибку, когда значение пытается быть установлено на копии фрагмента из фрейма данных. Попробуйте вместо этого использовать .loc[row_indexer,col_indexer] = value

2. Спасибо — отлично

Ответ №2:

Вы также можете попробовать это:

 df['Code'].replace('....',method='ffill',inplace=True)
 

method аргумент поможет вам выполнять свою работу вместо ffill() отдельного вызова