繁体   English   中英

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

新列'z'使用df['z'] = df['y']从列'y' 'z'获取其值。 这将带来缺失的值,因此使用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

您可以使用apply with option axis=1 那么你的解决方案非常简洁。

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

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

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

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

然后将z的nan位置设置为x中n为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

我不确定我是否理解这个问题,但这会是你想要的吗?

“如果y [i]”将跳过,如果值为none。

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

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

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

在上面的示例中,您将从x开始,并使用y的相应值替换每个值,只要新值不是NaN

问题未解决?试试使用:帮您解决问题。
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2023 STACKOOM.COM