将任意列数的值合并为新列

时间:2014-04-09 04:29:47

标签: python pandas

我的DataFrame包含多个列,其中每个行的唯一值为每行:

               A            B            C         D          E
0            NaN          NaN          NaN       NaN   POSITIVE  
1            NaN          NaN          NaN       NaN        NaN   
2            NaN          NaN          NaN       NaN   POSITIVE  
3            NaN          NaN          NaN       NaN   POSITIVE   
4       POSITIVE          NaN          NaN       NaN        NaN   
5            NaN          NaN          NaN       NaN   POSITIVE  
6            NaN          NaN          NaN       NaN   POSITIVE  
7       NEGATIVE          NaN          NaN       NaN        NaN

我需要将这些组合成一个摘要列:

0     POSITIVE
1          NaN
2     POSITIVE
3     POSITIVE
4     POSITIVE
5     POSITIVE
6     POSITIVE
7     NEGATIVE

我使用链式combine_first方法完成了这项工作:

df.A.combine_first(df.B).combine_first(df.С).combine_first(df.В).combine_first(df.E)

后来我发现similar solution使用fillna

df.A.fillna(df.B).fillna(df.С).fillna(df.В).fillna(df.E)

但我正在寻找任意数量的列的推广。我尝试将这些方法应用为缩减函数,但无法使其正常工作。

有关更优雅/更有效的方法的任何想法吗?

1 个答案:

答案 0 :(得分:3)

这是我的诀窍:

df.fillna('').sum(axis=1).replace('', np.nan)