Заменить следующую строку значением на основе предыдущего
Если у нас значение 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
→ Ссылка
- Поменяйте в этой колонке
0наNA - Используйте функцию
fillna(method='ffill')чтобы заменить значенияNAна предыдущие не-NAзначения в колонке. - Поменяйте оставшиеся
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