如何使用if语句为python中的新列赋值?

时间:2016-05-19 03:05:37

标签: python pandas

我在数据框中有两列,我需要根据它们创建一个新列。例如:

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!

1 个答案:

答案 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)