Python:从现有列创建一个新列

Kex*_* Xu 12 python calculated-columns missing-data pandas

我正在尝试基于两列创建新列.假设我想创建一个新的列z,它应该是y的值,当它没有丢失时,并且当y确实缺失时是x的值.所以在这种情况下,我希望z是[1, 8, 10, 8].

   x   y
0  1 NaN
1  2   8
2  4  10
3  8 NaN
Run Code Online (Sandbox Code Playgroud)

Vid*_*a G 19

'z''y'使用列从列中获取其值df['z'] = df['y'].这会带来缺失值,因此请fillna使用列填充它们'x'.链接这两个动作:

>>> df['z'] = df['y'].fillna(df['x'])
>>> df
   x   y   z
0  1 NaN   1
1  2   8   8
2  4  10  10
3  8 NaN   8
Run Code Online (Sandbox Code Playgroud)


Hal*_*Ali 15

您可以使用apply选项axis=1.那么你的解决方案非常简洁.

df[z] = df.apply(lambda row: row.y if pd.notnull(row.y) else row.x, axis=1)
Run Code Online (Sandbox Code Playgroud)


EdC*_*ica 6

使用np.where

In [3]:

df['z'] = np.where(df['y'].isnull(), df['x'], df['y'])
df
Out[3]:
   x   y   z
0  1 NaN   1
1  2   8   8
2  4  10  10
3  8 NaN   8
Run Code Online (Sandbox Code Playgroud)

这里它使用布尔条件,如果为真则返回df['x']其他df['y']