我有这个数据框:
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}
。但这是行不通的。有没有简单的方法可以执行此映射?
答案 0 :(得分:2)
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
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