【问题标题】:Fill NaN values by other column [duplicate]按其他列填充 NaN 值[重复]
【发布时间】:2020-10-05 22:45:35
【问题描述】:

您好,我有一个 df,例如

COL1 COL2 
SEQ1 SEQ1_67
SEQ2 NaN
SEQ3 SEQ3_7788
SEQ5 SEQQ0
SEQ6 NaN
SEQ7 NaN

我想用COL1对应的内容填充COL2NaN值 并得到

COL1 COL2 
SEQ1 SEQ1_67
SEQ2 SEQ2
SEQ3 SEQ3_7788
SEQ5 SEQQ0
SEQ6 SEQ6
SEQ7 SEQ7

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    用途:

    df.COL2 = df.COL2.mask(df.COL1.eq(df.COL2))
    

    或者:

    df.loc[df.COL1.eq(df.COL2), 'COL2'] = np.nan
    

    print (df)
       COL1       COL2
    0  SEQ1    SEQ1_67
    1  SEQ2        NaN
    2  SEQ3  SEQ3_7788
    3  SEQ5      SEQQ0
    4  SEQ6        NaN
    5  SEQ7        NaN
    

    对于反向更简单的是使用Series.fillna

    df.COL2 = df.COL2.fillna(df.COL1)
    

    【讨论】:

    • oups 对不起,我混淆了 df,第一个是我应该得到的结果
    • @chippycentra - 答案已编辑。
    【解决方案2】:

    你可以使用numpy.where:

    In [1334]: df.COL2 = np.where(df.COL2.isna(), df.COL1, df.COL2)
    
    In [1335]: df
    Out[1335]: 
       COL1       COL2
    0  SEQ1    SEQ1_67
    1  SEQ2       SEQ2
    2  SEQ3  SEQ3_7788
    3  SEQ5      SEQQ0
    4  SEQ6       SEQ6
    5  SEQ7       SEQ7
    

    【讨论】:

      猜你喜欢
      • 2021-12-20
      • 1970-01-01
      • 2020-11-14
      • 2017-07-10
      • 2020-05-14
      • 2021-08-31
      • 2018-04-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多