在一个问题上需要你的帮助。 我有一个数据帧df
它有 3 列"对象"数据类型 -opt1
、opt2
、opt3
。
现在我需要创建一个新的列var
它将具有以下内容-
- 如果
opt2
和opt3
为无/空/空,opt1
不是无/空/空: 然后df['var'] = df['opt1']
elif - Empty,
opt2
为 None/Null/Empty: 然后df['var'] = df['opt1'] + '|' + df['opt3']
elif - ,
opt3
为无/空/空: 然后df['var'] = df['opt1'] + '|' + df['opt2']
- 否则:
df['var'] = df['opt1'] + '|' + df['opt2'] + '|' + df['opt3']
opt1
和opt3
为 None/Null/opt1
和opt2
为无/空/空请建议我将上述条件放在Python 3.6中或与我分享任何更好的方法。
我认为需要:
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