我在数据框中有两列,我需要根据它们创建一个新列。例如:
df = pd.DataFrame(data={'a':[1.0,1.0,2.0], 'b':[3.0,3.0,3.0]})
df.iloc[1,0]=np.nan
a b
0 1.0 3.0
1 NaN 3.0
2 2.0 3.0
我需要添加一个列c,该列从非空时取值,否则取b。像:
a b c
0 1.0 3.0 1.0
1 NaN 3.0 3.0
2 2.0 3.0 2.0
以下是我的尝试:
def dist(df):
if df['a']:
return df.a
else:
return df.b
df['c']=df.apply(dist,axis=1)
但结果不是我的预期。任何人都可以建议我应该做什么? THX!
答案 0 :(得分:1)
NSUserDefaults
写下更紧凑的东西很有吸引力:
>>> d['c'] = df.a.where(~np.isnan(df.a), df.b)
>>> df
a b c
0 1 3 1
1 NaN 3 3
2 2 3 2
但这对df.a [k] == 0(也被解释为False)做了正确的事情。
您可以使用NaN的属性代替isnan,因为它是唯一不等于其自身的值,因此以下也适用:
df['c'] = df.a.where(df.a, df.b)