python - 从 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']
?
解决方案
DataFrame.loc
与 一起使用boolean indexing
:
df.loc[df['new_col']=='Above Average', 'new_col'] = 'Good'
如果未指定列,则所有列都Good
按条件设置。
此外,两行代码都应通过numpy.where
or更改为一行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.replace
或Series.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'])
推荐阅读
- kubernetes - 如何显示挂载特定配置映射/秘密的所有部署/守护程序集?
- java - 车辆路线问题 - OR 工具教程未在 Eclipse 上运行
- batch-file - 批处理文件启动器(批量)未正确评估路径
- html - 有什么方法可以使用
顶部或底部没有空间?
- python - 为了在 Python 中保持数据的真实性,重新采样数据的更好方法?
- string - 在 MIPS 汇编语言中拆分字符串并存储为 2 个整数变量
- scala - 显示当前项目的 sbt 任务的源目录以及它所依赖的项目的源目录
- typescript - 类型保护没有像预期的那样缩小泛型类型。“T”可以用与“数字”无关的任意类型实例化
- podman - How to change data location of podman?
- javascript - Bootstrap 4.5.2 错误/更新 popper.js 过时的新方法是 popperjs/core