考虑下面的df和字典
from itertools import product
import pandas as pd
a = list(product((1,2,3),('A','B','C')))
df = pd.DataFrame(a, columns= ['num', 'letter']).set_index('letter')
mapper = {'B' : 21, 'A': 20}
df
num
A 1
B 1
C 1
A 2
B 2
C 2
A 3
B 3
C 3
我的目标是根据
num
替换mapper
值,否则保留num
值。所需的结果如下: num
A 20
B 21
C 1
A 20
B 21
C 2
A 20
B 21
C 3
是否可以不循环
mapper
键和num
设置值来实现?请注意,我正在尝试仅映射索引的一些值。这question也很有帮助。
先感谢您。
熊猫0.23.4
python 3.7.1
最佳答案
将mapper
词典转换为pd.Series()
并使用df.update()
更新值:
df.update(pd.Series(mapper,name='num'))
#or df.num=df.index.to_series(name='num').map(mapper).fillna(df.num).astype(int)
print(df.astype(int))
num
letter
A 20
B 21
C 1
A 20
B 21
C 2
A 20
B 21
C 3