#python #pandas
Вопрос:
Я пытаюсь заполнить недостающие данные в моем фрейме данных pandas. Однако эти данные могут быть заполнены только определенным нетрадиционным способом. Сначала я пометил отсутствующие данные -1, поэтому я хочу определенным образом заменить значение -1.
Колонка А | Колонка В |
---|---|
12 | 11 |
99 | -1 |
43 | 34 |
23 | -1 |
65 | -1 |
17 | 42 |
12 | 66 |
99 | -1 |
43 | 22 |
23 | -1 |
65 | -1 |
17 | 42 |
Я хочу заменить каждое отсутствующее значение или -1 следующим доступным положительным значением из того же столбца.
Колонка А | Колонка В |
---|---|
12 | 11 |
99 | 34 |
43 | 34 |
23 | 42 |
65 | 42 |
17 | 42 |
12 | 66 |
99 | 22 |
43 | 22 |
23 | 42 |
65 | 42 |
17 | 42 |
Я могу достичь желаемого результата, если количество непрерывных-1 останется постоянным df['col].shift(1)
, однако это не сработает, потому что здесь размещение-1 является случайным.
Размер данных, с которыми я имею дело, довольно велик.
Ответ №1:
Вы могли бы использовать replace
bfill
для этого.
df['ColumnB'] = df['ColumnB'].replace(-1, method='bfill')
print(df)
Sample Output
ColumnA ColumnB
0 12 11
1 99 34
2 43 34
3 23 42
4 65 42
5 17 42
6 12 66
7 99 22
8 43 22
9 23 42
10 65 42
11 17 42
Ответ №2:
использовать replace()
bfill()
:
df['Column B']=df['Column B'].replace(-1,float('nan')).bfill(downcast='infer')
выход из df
:
Column A Column B
0 12 11
1 99 34
2 43 34
3 23 42
4 65 42
5 17 42
6 12 66
7 99 22
8 43 22
9 23 42
10 65 42
11 17 42
Ответ №3:
Воспользуйся pd.Series.bfill
In [24]: s = pd.Series([11, -1, 34, -1, -1, 42, 66, -1, 22, -1, -1, 42])
In [26]: s.replace({-1: np.nan}).bfill()
Out[26]:
0 11.0
1 34.0
2 34.0
3 42.0
4 42.0
5 42.0
6 66.0
7 22.0
8 22.0
9 42.0
10 42.0
11 42.0
dtype: float64