python - 在 Python 中从另一列创建新列

标签 python pandas

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

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

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

然后我执行以下操作:

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

但是,我注意到此操作还更改了 df['col'] 中的值

我应该怎么做才能对 df['col'] 中的值进行排序?不受我在df['new_col']中所做的操作的影响?

最佳答案

使用DataFrame.locboolean 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.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'])

关于python - 在 Python 中从另一列创建新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56126463/

相关文章:

python - 当我没有使用 @staticmethod 装饰器时,为什么我的减法函数在静态上下文中工作?

python-3.x - groupby pandas数据框中连续相同的值和出现次数的累积计数

Python,解析列数据,pandas

python - 如何从pyspark中的数组中提取元素

python - 在 dataframe 中找到 "True"并在 True 之前标记 X 值

python - Pandas Row 均值为 NaN

python - 基于索引的 Pandas Dataframe Mask

Python - 在字符串中查找日期

python 3 : Converting image to grayscale

python - 在 PyCharm 中更改控制台的工作目录