如果我有这样的数据框:
A B C
Nan 1.0 0.0
1.0 Nan 1.0
1.0 0.0 Nan
我想在数据框中创建一个新列,以提供有关每一行中哪一列包含nan值的信息。
A B C Col4
Nan 1.0 Nan A,C
1.0 Nan 1.0 B
1.0 Nan Nan B,C
有帮助吗?
答案 0 :(得分:2)
用DataFrame.isna
进行比较,并将DataFrame.dot
与列名一起使用,最后用Series.str.rstrip
删除最后一个,
:
df['col4'] = df.isna().dot(df.columns + ',').str.rstrip(',')
#if values are strings Nan
#df['col4'] = df.eq('Nan').dot(df.columns + ',').str.rstrip(',')
print (df)
A B C col4
0 NaN 1.0 NaN A,C
1 1.0 NaN 1.0 B
2 1.0 NaN NaN B,C
答案 1 :(得分:1)
天真的方法:
def f(r):
ret=[]
if(r['A']=='Nan'): ret.append('A')
if(r['B']=='Nan'): ret.append('B')
if(r['C']=='Nan'): ret.append('C')
return ','.join(ret)
df['D'] = df.apply(f, axis=1)
print(df)
A B C
0 Nan 1.0 Nan
1 1.0 Nan 1.0
2 1.0 Nan Nan
A B C D
0 Nan 1.0 Nan A,C
1 1.0 Nan 1.0 B
2 1.0 Nan Nan B,C
我对字符串进行了测试,但是您可以将其替换为np.nan
。