我有一个数据帧,如下所示:
A,B,C,D
Nan,NaN,NaN,NaN
Nan,b,c,NaN
Nan,2,Nan,d
a,e,NaN,f
i,j,1,NaN
我想创建一个E列来描述其他列中缺少的模式,例如: E列将包含
A,B,C,D,E
Nan,NaN,NaN,NaN,ABCD
Nan,1,2,NaN,AD
Nan,3,Nan,d,AC
a,e,NaN,6,C
i,j,4,5,
我尝试了df.isnull().sum(axis=1)
但这不考虑例如第4行和第5行中的顺序,它返回相同的值1。
如上所述,如何创建想要的列?
答案 0 :(得分:4)
这是唱歌DataFrame.dot
的一种方式:
df['E'] = df.isna().dot(df.columns)
print(df)
A B C D E
0 NaN NaN NaN NaN ABCD
1 NaN b c NaN AD
2 NaN 2 NaN d AC
3 a e NaN f C
4 i j 1 NaN D
答案 1 :(得分:0)
IIUC,我们只能map
和agg
df["null"] = (
df.isnull()
.apply(lambda x: x.map({True: x.name}))
.stack(0)
.groupby(level=0)
.agg("".join)
)
print(df)
A B C D null
0 NaN NaN NaN NaN ABCD
1 NaN b c NaN AD
2 NaN 2 NaN d AC
3 a e NaN f C
4 i j 1 NaN D