Заменить следующую строку значением на основе предыдущего

Если у нас значение 1 а следующее (нижнее) 0, то нижнее равно тоже 1 Если значение 1, а нижнее -1 - ничего не делаем Если в строке -1, а следующее ноль, то пишем в следующей -1.

Пробую стандартным методом скопировать значения в столбце df['1'] но не выходит.

вот файл

df = pd.read_csv('23.csv')
df.columns = ['Date', '1']
       Date   1
0   4-Jan-00    0
1   5-Jan-00    0
2   6-Jan-00    1
3   7-Jan-00    0
4   10-Jan-00   0
5   11-Jan-00  -1
6   12-Jan-00   0
7   13-Jan-00   0
8   14-Jan-00   1
9   17-Jan-00   0
10  18-Jan-00   0
11  19-Jan-00   0
12  20-Jan-00   0
13  21-Jan-00   1

Результат

       Date   1
0   4-Jan-00    0
1   5-Jan-00    0
2   6-Jan-00    1
3   7-Jan-00    1
4   10-Jan-00   1
5   11-Jan-00  -1
6   12-Jan-00  -1
7   13-Jan-00  -1
8   14-Jan-00   1
9   17-Jan-00   1
10  18-Jan-00   1
11  19-Jan-00   1
12  20-Jan-00   1
13  21-Jan-00   1

Ответы (2 шт):

Автор решения: CrazyElf
  1. Поменяйте в этой колонке 0 на NA
  2. Используйте функцию fillna(method='ffill') чтобы заменить значения NA на предыдущие не-NA значения в колонке.
  3. Поменяйте оставшиеся NA обратно на 0.

Пример кода:

import pandas as pd
import numpy as np

df = pd.DataFrame({'1': [0, 0, 1, 0, 1, 0, 0, -1, 0, 0 ,0, 1, 0]})
df['1'] = df['1'].replace(0, np.NaN).fillna(method='ffill').replace(np.NaN, 0).astype(int)
df['1']

Вывод:

0     0
1     0
2     1
3     1
4     1
5     1
6     1
7    -1
8    -1
9    -1
10   -1
11    1
12    1
Name: 1, dtype: int64

Приходится ещё шаманить потом с типом данных, чтобы устранить последствия замены на NA. Вероятно, можно сделать и как-то проще.

→ Ссылка
Автор решения: strawdog

воспользуйтесь методом replace:

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

при ваших исходных данных, получим:

         Date  1
0    4-Jan-00  0
1    5-Jan-00  0
2    6-Jan-00  1
3    7-Jan-00  1
4   10-Jan-00  1
5   11-Jan-00 -1
6   12-Jan-00 -1
7   13-Jan-00 -1
8   14-Jan-00  1
9   17-Jan-00  1
10  18-Jan-00  1
11  19-Jan-00  1
12  20-Jan-00  1
13  21-Jan-00  1
→ Ссылка