我有一个看起来像这样的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 |
答案 0 :(得分:1)
您的方法无效,因为您选择的列 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
(当我在300k行数据帧上测试时速度稍快)
df.qty = np.where(df.item.isnull(), np.nan, df.qty)