У меня есть df, который выглядит так:
| id | qty | item |
+-----+------+------+
| 001 | 700 | CB04 |
| 002 | 500 | NaN |
| 003 | 1500 | AB01 |
Я хочу скопировать значения NaN из df['item']
в df['qty']
, чтобы он выглядел так:
| id | qty | item |
+-----+------+----------+
| 001 | 700 | CB04 box |
| 002 | NaN | NaN |
| 003 | 1500 | AB01 box |
я сделал следующее
df['qty'] = df.loc[df['item'].isnull(),'item']
но мой df оказался таким.
| id | qty | item |
+-----+-----+----------+
| 001 | NaN | CB04 box |
| 002 | NaN | NaN |
| 003 | NaN | AB01 box |
Ваш подход не работает, потому что вы выбираете item
столбца, когда он равен нулю, и устанавливаете qty
равным этому результату, который всегда NaN
, поэтому он заполняет qty
с помощью NaN
Используйте loc
с булевым индексированием и установите нужный столбец. Вы были близки, просто не совсем правильно.
df.loc[df.item.isnull(), 'qty'] = np.nan
id qty item
0 1 700.0 CB04
1 2 NaN NaN
2 3 1500.0 AB01
Также, используя np.where
(немного быстрее, когда я тестировал на np.where
)
df.qty = np.where(df.item.isnull(), np.nan, df.qty)