将两列聚合到新列中,如果两列中有两个 NaN,则新列应给出 NaN

时间:2021-03-17 03:50:19

标签: python pandas

我想将两列聚合到新列中。两列可能包含 NaN 值。表格如下所示:

no   type   status   category
1     a       xx        yy   
2     b       xx        nan
3     c       nan       nan

到目前为止我尝试过的是使用以下脚本聚合它们。但它也结合了两个 NaN 成为 NaN_NaN

df['category'] = df[['cat_1', 'cat_2']].astype(str).agg('_'.join, axis = 1)

预期结果是如果有两个 NaN,新列只会给新列 NaN 而不是 NaN_NaN

no   type   cat_1      cat_2    category  
1     a       xx        yy        xx_yy
2     b       xx        nan       xx_nan
3     c       nan       nan        nan

1 个答案:

答案 0 :(得分:0)

你可以这样做:

df["category"] = df[["cat_1","cat_2"]].astype(str).agg(lambda x: '_'.join(set(x)), 1)

或等效地:

df["category"] = df[["cat_1","cat_2"]].astype(str).agg(set, 1).agg('_'.join)

输出(两种情况下)

df
   no type cat_1 cat_2 category
0   1    a    xx    yy    xx_yy
1   2    b    xx   NaN   nan_xx
2   3    c   NaN   NaN      nan