一起使用.loc和.replace()

时间:2017-07-27 15:33:29

标签: python pandas dictionary

如何根据字典更新数据框的列值?

例如,我的df看起来像: df = pd.DataFrame({'B' : [100,101,102,103],'E' : pd.Categorical(["test","train","test","train"]), 'F' : [128,300,1205,2000]})

Out[28]:

     B      E     F
0  100   test   128
1  101  train   300
2  102   test  1205
3  103  train  2000

dict = {300:301, 2000:2001}

df.loc[df['B'].isin([101,103])].replace(dict)

Out[31]: 
     B      E     F
1  101  train   301
3  103  train  2001

这给出了正确的结果,但在现场执行此操作会产生复制警告,我需要使用此逻辑更新原始数据帧。

另外,做一个非常低效的groupby& apply组合有效,但显然不是最佳选择。

我该如何做到这一点?

1 个答案:

答案 0 :(得分:2)

您可以将结果分配回数据框的相同位置:

d = {300:301, 2000:2001}  
mask = df.B.isin([101, 103])  
df.loc[mask] = df.loc[mask].replace(d)

df
#     B     E      F
#0  100 test    128
#1  101 train   301
#2  102 test    1205
#3  103 train   2001

或者您可以使用update

df.update(df.loc[df.B.isin([101, 103])].replace(d))