将多个项目映射到熊猫数据框中的值

时间:2020-01-09 23:51:36

标签: python pandas

我有这个数据框:

df = pd.DataFrame({"a":[1,2,3, 100], "b": [4,5,6, 50]})

我想用50替换b列中的值(4、5、6)。我可以使用以下代码:

vals_to_replace1 = {4:10, 5:10, 6:10}
df['b'] = df['b'].map(vals_to_replace1)

但是我有一长串需要替换为一个值的项目。我尝试了以下解决方案: vals_to_replace = {[4,5,6]:10}。但这是行不通的。有没有简单的方法可以执行此映射?

1 个答案:

答案 0 :(得分:2)

使用Series.replace

my_list = [4,5,6]
val = 10
df['b'] = df['b'].replace(my_list,val)

或创建字典

df['b'] = df['b'].replace(dict(zip(my_list,[val]*len(my_list))))

#Or Series.map + fillna
#df['b'] = ( df['b'].map(dict(zip(my_list,[val]*len(my_list))))
#                   .fillna(df['b']) )

我们也可以使用Series.isin

m = df['b'].isin(my_list)

然后您可以使用DataFrame.loc

df.loc[m,'b'] = val

Series.mask

df['b']=df['b'].mask(m,val)
#df['b']=df['b'].where(~m,val)

输出df

     a     b
0    1  10.0
1    2  10.0
2    3  10.0
3  100  50.0