我有一个 python 中的 pandas 数据框,我们称之为 df
在此数据框中,我基于现有列创建一个新列,如下所示:
df.loc[:, 'new_col'] = df['col']
然后我执行以下操作:
df[df['new_col']=='Above Average'] = 'Good'
但是,我注意到此操作还更改了 df['col']
中的值
我应该怎么做才能对 df['col']
中的值进行排序?不受我在df['new_col']
中所做的操作的影响?
最佳答案
使用DataFrame.loc
与 boolean indexing
:
df.loc[df['new_col']=='Above Average', 'new_col'] = 'Good'
如果未指定列,则所有列均根据条件设置为Good
。
此外,这两行代码都应更改为 numpy.where
。或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'])
关于python - 在 Python 中从另一列创建新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56126463/