在一个问题上需要你的帮助。
我的数据框df
有3列“对象”数据类型 - opt1
,opt2
,opt3
。
现在我需要创建一个新列var
,其中包含以下内容 -
opt2
和opt3
为无/空/空且opt1
不是无/空/空:
然后df['var'] = df['opt1']
opt1
和opt3
为None / Null / Empty,opt2
为None / Null / Empty:
然后df['var'] = df['opt1'] + '|' + df['opt3']
opt1
和opt2
为None / Null / Empty,opt3
为None / Null / Empty:
然后df['var'] = df['opt1'] + '|' + df['opt2']
df['var'] = df['opt1'] + '|' + df['opt2'] + '|' + df['opt3']
请建议我在Python 3.6中提出上述条件,或者与我分享更好的方法。
答案 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