首页 > 解决方案 > 从 Python 中的另一列创建新列

问题描述

我在 python 中有一个 pandas 数据框,我们称之为df

在此数据框中,我根据现有列创建一个新列,如下所示:

df.loc[:, 'new_col'] = df['col']

然后我执行以下操作:

df[df['new_col']=='Above Average'] = 'Good'

但是,我注意到这个操作也改变了df['col']

我应该怎么做才能使 in 中的值df['col']不受我在 in 中执行的操作的影响 df['new_col']

标签: pythonpandas

解决方案


DataFrame.loc与 一起使用boolean indexing

df.loc[df['new_col']=='Above Average', 'new_col'] = 'Good'

如果未指定列,则所有列都Good按条件设置。


此外,两行代码都应通过numpy.whereor更改为一行Series.mask

df['new_col'] = np.where(df['new_col']=='Above Average', 'Good', df['col'])

df['new_col'] = df['col'].mask(df['new_col']=='Above Average', 'Good')

编辑:要更改许多值,请使用Series.replaceSeries.map与指定值的字典一起使用:

d = {'Good':['Above average','effective'], 'Very Good':['Really effective']}

#swap key values in dict
#http://stackoverflow.com/a/31674731/2901002
d1 = {k: oldk for oldk, oldv in d.items() for k in oldv}
print (d1)
{'Above average': 'Good', 'effective': 'Good', 'Really effective': 'Very Good'}

df['new_col'] = df['col'].replace(d1)
#if large data obviously better performance
df['new_col'] = df['col'].map(d1).fillna(df['col'])

推荐阅读