Как создать новый столбец, содержащий имена столбцов, которые являются Nan с пандами? - PullRequest
1 голос
/ 14 мая 2019

Если у меня есть такой кадр данных:

   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 ]

2 голосов
/ 14 мая 2019

Сравните на 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 голос
/ 14 мая 2019

Наивный подход:

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.

...