如何基于none / null值追加pandas Dataframe的列?

时间:2018-05-15 06:23:13

标签: pandas dataframe null python-3.6 nan

在一个问题上需要你的帮助。 我的数据框df有3列“对象”数据类型 - opt1opt2opt3

现在我需要创建一个新列var,其中包含以下内容 -

  1. 如果opt2opt3为无/空/空且opt1不是无/空/空: 然后df['var'] = df['opt1']
  2. elif opt1opt3为None / Null / Empty,opt2为None / Null / Empty: 然后df['var'] = df['opt1'] + '|' + df['opt3']
  3. elif opt1opt2为None / Null / Empty,opt3为None / Null / Empty: 然后df['var'] = df['opt1'] + '|' + df['opt2']
  4. 其他:df['var'] = df['opt1'] + '|' + df['opt2'] + '|' + df['opt3']
  5. 请建议我在Python 3.6中提出上述条件,或者与我分享更好的方法。

1 个答案:

答案 0 :(得分:1)

我认为需要:

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