我的数据框中有两列,我需要基于它们创建一个新列。例如:
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,当它不为 null 时,它从 a 中获取值,否则从 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)
但结果不是我所期望的。谁能建议我应该做什么?谢谢!
最佳答案
>>> 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['c'] = df.a.where(df.a, df.b)
但这不会为 df.a[k] == 0 做正确的事情(也被解释为 False)。
您可以使用 NaN 的属性代替 isnan,因为它是唯一不等于自身的值,因此以下内容也有效:
df['c'] = df.a.where(df.a==df.a, df.b)
关于python - 如何使用if语句为python中的新列赋值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37313271/