pandas 从包含缺失值的现有列创建新列

lymgl2op  于 12个月前  发布在  其他
关注(0)|答案(6)|浏览(96)

我正在尝试基于这两个列创建一个新列。假设我想创建一个新的列z,当它没有缺失时,它应该是y的值,当y确实缺失时,它应该是x的值。所以在这个例子中,我期望z是[1, 8, 10, 8]

x   y
0  1 NaN
1  2   8
2  4  10
3  8 NaN
vnzz0bqm

vnzz0bqm1#

新列'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
qvtsj1bj

qvtsj1bj2#

您可以将applyaxis=1选项一起使用。那么你的解决方案就很简洁了。

df[z] = df.apply(lambda row: row.y if pd.notnull(row.y) else row.x, axis=1)
t30tvxxf

t30tvxxf3#

使用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']

deyfvvtc

deyfvvtc4#

假设DataFrame被称为df。首先复制y列。

df["z"] = df["y"].copy()

然后将z的nan位置设置为nan在z中的x中的位置。

import numpy as np
df.z[np.isnan(df.z)]=df.x[np.isnan(df.z)]

>>> df 
   x   y   z
0  1 NaN   1
1  2   8   8
2  4  10  10
3  8 NaN   8
col17t5w

col17t5w5#

我不确定我是否理解了这个问题,但这是你要找的吗?
“if y[i]”将跳过如果值为none。

for i in range(len(x));
    if y[i]:
        z.append(y[i])
    else:
        z.append(x[i])
ghhaqwfi

ghhaqwfi6#

update方法几乎就是这样做的。唯一需要注意的是,update将在适当的位置执行此操作,因此您必须首先创建一个副本:

df['z'] = df.x.copy()
df.z.update(df.y)

在上面的例子中,你从x开始,用y中的相应值替换每个值,只要新值不是NaN

相关问题