Использование ffill () в условном np.where - PullRequest
0 голосов
/ 05 августа 2020

Вот образец моего фрейма данных:

       id    Apples     Values        1Y 
0       6  21973805     455215  21889611
1       4  36403870    5661698       nan
2       5    277500      98846       nan  
3       1        19        nan       nan
4       2       120       6466    568912
5       1      3210      86565       nan

И я хочу заполнить столбец nan из [1Y] предыдущим известным значением. Но я хочу заполнить его ТОЛЬКО, если соответствующее значение [Values] не равно nan.

Получив таким образом результат:

       id    Apples     Values        1Y 
0       6  21973805     455215  21889611
1       4  36403870    5661698  21889611
2       5    277500      98846  21889611       
3       1        19        nan       nan
4       2       120       6466    568912
5       1      3210      86565    568912

Я пробовал следующий код:

df['1Y'] = np.where((df['Values'] != np.nan) & (df['1Y'] == np.nan), df['1Y'].ffill(), df['1Y'])

Но это ничего не меняет в фрейме данных.

1 Ответ

1 голос
/ 05 августа 2020

Вы должны использовать pd.Series.isna для проверки nan записей, если вы это сделаете:

df['1Y'] = np.where((~df['values'].isna()) & (df['1Y'].isna()), 
                    df['1Y'].ffill(), df['1Y'])

df['1Y']
0    21889611.0
1    21889611.0
2    21889611.0
3           NaN
4      568912.0
5      568912.0
Name: 1Y, dtype: float64

Если факт np.nan==np.nan return False, проверьте подробнее здесь: почему np.nan! = np.nan .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...