Python: 从现有列创建新列
Python: create a new column from existing columns
我正在尝试基于这两列创建一个新列。假设我要创建一个新列 z,当它不缺失时它应该是 y 的值,当 y 确实缺失时它应该是 x 的值。所以在这种情况下,我希望 z 为 [1, 8, 10, 8]
.
x y
0 1 NaN
1 2 8
2 4 10
3 8 NaN
我不确定我是否理解这个问题,但这就是您要找的吗?
如果值为 none.,"if y[i]" 将跳过
for i in range(len(x));
if y[i]:
z.append(y[i])
else:
z.append(x[i])
假设 DataFrame 被称为 df
。首先复制y
列。
df["z"] = df["y"].copy()
然后将 z 的 nan 位置设置为 x 中 nans 在 z 中的位置。
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
使用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
这里使用布尔条件 if true returns df['x']
else df['y']
您可以使用 apply
和选项 axis=1
。那么你的解决方案就很简洁了。
df[z] = df.apply(lambda row: row.y if pd.notnull(row.y) else row.x, axis=1)
update
方法几乎可以做到这一点。唯一需要注意的是 update
会在适当的位置执行此操作,因此您必须先创建一个副本:
df['z'] = df.x.copy()
df.z.update(df.y)
在上面的示例中,您从 x
开始并用 y
中的相应值替换每个值,只要新值不是 NaN
.
新列 'z'
使用 df['z'] = df['y']
从列 'y'
中获取其值。这带来了缺失值,因此使用 'x'
列使用 fillna
填充它们。链接这两个动作:
>>> 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
我正在尝试基于这两列创建一个新列。假设我要创建一个新列 z,当它不缺失时它应该是 y 的值,当 y 确实缺失时它应该是 x 的值。所以在这种情况下,我希望 z 为 [1, 8, 10, 8]
.
x y
0 1 NaN
1 2 8
2 4 10
3 8 NaN
我不确定我是否理解这个问题,但这就是您要找的吗?
如果值为 none.,"if y[i]" 将跳过
for i in range(len(x));
if y[i]:
z.append(y[i])
else:
z.append(x[i])
假设 DataFrame 被称为 df
。首先复制y
列。
df["z"] = df["y"].copy()
然后将 z 的 nan 位置设置为 x 中 nans 在 z 中的位置。
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
使用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
这里使用布尔条件 if true returns df['x']
else df['y']
您可以使用 apply
和选项 axis=1
。那么你的解决方案就很简洁了。
df[z] = df.apply(lambda row: row.y if pd.notnull(row.y) else row.x, axis=1)
update
方法几乎可以做到这一点。唯一需要注意的是 update
会在适当的位置执行此操作,因此您必须先创建一个副本:
df['z'] = df.x.copy()
df.z.update(df.y)
在上面的示例中,您从 x
开始并用 y
中的相应值替换每个值,只要新值不是 NaN
.
新列 'z'
使用 df['z'] = df['y']
从列 'y'
中获取其值。这带来了缺失值,因此使用 'x'
列使用 fillna
填充它们。链接这两个动作:
>>> 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