Как добавить столбцы в панде Dataframe на основе значений none / null? - PullRequest
0 голосов
/ 15 мая 2018

Нужна ваша помощь по одному вопросу.У меня есть фрейм данных df, который имеет 3 столбца типа данных «объект» - opt1, opt2, opt3.

Теперь мне нужно создать новый столбец var, который будет иметьfollowings-

  1. , если opt2 и opt3 - Нет / Нуль / Пусто и opt1 не является Нет / Ноль / Пусто: тогда df['var'] = df['opt1']
  2. elif opt1 и opt3 - Нет / Нуль / Пусто и opt2 - Нет / Нуль / Пусто: тогда df['var'] = df['opt1'] + '|' + df['opt3']
  3. elif opt1 и opt2 - Нет / Нуль / Пусто и opt3None / Null / Empty: тогда df['var'] = df['opt1'] + '|' + df['opt2']
  4. else: df['var'] = df['opt1'] + '|' + df['opt2'] + '|' + df['opt3']

Пожалуйста, предложите мне поставить вышеупомянутые условия в Python 3.6 или поделитесь со мной каким-нибудь лучшим подходом.

1 Ответ

0 голосов
/ 15 мая 2018

Я думаю, что нужно:

df = pd.DataFrame({'opt1':['',np.nan,'a','a','a',np.nan],
                       'opt2':[np.nan,'b',np.nan,'b','b',np.nan],
                        'opt3':['c','Null',np.nan,'c',np.nan,np.nan]})

print (df)
  opt1 opt2  opt3
0       NaN     c
1  NaN    b  Null
2    a  NaN   NaN
3    a    b     c
4    a    b   NaN
5  NaN  NaN   NaN

#replace strings Null and empty strins to NaN 
df1 = df.mask(df.isin(['Null','']))
#join values per rows with filter out NaNs
df['var'] = df1.apply(lambda x: '|'.join(x.dropna()), 1)
print (df)
  opt1 opt2  opt3    var
0       NaN     c      c
1  NaN    b  Null      b
2    a  NaN   NaN      a
3    a    b     c  a|b|c
4    a    b   NaN    a|b
5  NaN  NaN   NaN       
...