[英]Using .loc and .replace() Together
如何根據字典更新數據框的列值?
例如,我的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
組合工作,但顯然不是最佳選擇。
我該怎么做?
您可以將結果分配回數據框的相同位置:
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))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.