代码之家  ›  专栏  ›  技术社区  ›  as - if

将NaN值携带/复制到另一列df pandas

  •  1
  • as - if  · 技术社区  · 8 年前

    我有一个像这样的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']
    

    但我的测向仪结果是这样的。

    |  id | qty |   item   |
    +-----+-----+----------+
    | 001 | NaN | CB04 box |
    | 002 | NaN | NaN      |
    | 003 | NaN | AB01 box |
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   user3483203    8 年前

    您的方法不起作用,因为您正在选择列 item ,当它为空时,并设置 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)