如何创建一个新列,其中包含Nan是带有熊猫的列的名称?

时间:2019-05-14 08:19:35

标签: python-3.x pandas nan

如果我有这样的数据框:

   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

有帮助吗?

2 个答案:

答案 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