Преобразование данных отсутствующего столбца из доступных данных из того же столбца в фрейме данных pandas?

#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