2024-04-28 16:09:22 发布
网友
我正试图基于这两个列创建一个新列。假设我想创建一个新的列z,当它不丢失时应该是y的值,当y确实丢失时应该是x的值。在这种情况下,我希望z是[1, 8, 10, 8]。
[1, 8, 10, 8]
x y 0 1 NaN 1 2 8 2 4 10 3 8 NaN
使用np.where:
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
这里它使用布尔条件,如果true返回df['x']否则df['y']
df['x']
df['y']
可以将apply与选项axis=1一起使用。那么你的解决方案非常简洁。
apply
axis=1
df[z] = df.apply(lambda row: row.y if pd.notnull(row.y) else row.x, axis=1)
新列'z'使用df['z'] = df['y']从列'y'获取其值。这会带来丢失的值,因此使用fillna使用'x'列填充它们。连锁这两个动作:
'z'
df['z'] = df['y']
'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
使用
np.where
:这里它使用布尔条件,如果true返回
df['x']
否则df['y']
可以将
apply
与选项axis=1
一起使用。那么你的解决方案非常简洁。新列
'z'
使用df['z'] = df['y']
从列'y'
获取其值。这会带来丢失的值,因此使用fillna
使用'x'
列填充它们。连锁这两个动作:相关问题 更多 >
编程相关推荐