考虑以下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
答案 0 :(得分:1)
将mapper
字典转换为pd.Series()
并使用this blog post更新值:
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