考虑下面的 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
我的目标是根据mapper
替换num
值,否则保留num
值。期望的结果如下:
num
A 20
B 21
C 1
A 20
B 21
C 2
A 20
B 21
C 3
是否可以在不循环 mapper
键并设置 num
值的情况下实现此目的?
请注意,我试图仅映射索引的几个值。这个question也有帮助。
提前谢谢您。
Pandas 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
关于python - Pandas 如何根据索引值改变序列并保留其他序列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55086991/