熊猫如何根据索引值对系列进行突变并保留其他系列值

时间:2019-03-10 11:02:13

标签: python pandas

考虑以下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

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