gpt4 book ai didi

python - 使用两个字典映射列

转载 作者:太空狗 更新时间:2023-10-29 17:56:36 26 4
gpt4 key购买 nike

我有一个df:

ColA  ColB
1 1
2 3
2 2
1 2
1 3
2 1

我想使用两个不同的词典来更改 ColB 中的值。如果 ColA 中的值为 1,我想使用 d1,如果 ColB 中的值为 2,我想使用 d2

d1 = {1:'a',2:'b',3:'c'}
d2 = {1:'d',2:'e',3:'f'}

导致:

ColA  ColB
1 a
2 f
2 e
1 b
1 c
2 d

实现这一目标的最佳方式是什么?

最佳答案

一种方法是使用 np.where根据 ColA 的值使用一个或另一个字典映射 ColB 中的值:

import numpy as np
df['ColB'] = np.where(df.ColA.eq(1), df.ColB.map(d1), df.ColB.map(d2))

给出:

    ColA ColB
0 1 a
1 2 f
2 2 e
3 1 b
4 1 c
5 2 d

对于更通用的解决方案,您可以使用 np.select ,适用于多种条件。让我们在 ColA 和字典中添加另一个值,看看如何使用三种不同的映射来完成此操作:

print(df)
ColA ColB
0 1 1
1 2 3
2 2 2
3 1 2
4 3 3
5 3 1

values_to_map = [1,2,3]
d1 = {1:'a',2:'b',3:'c'}
d2 = {1:'d',2:'e',3:'f'}
d3 = {1:'g',2:'h',3:'i'}

#create a list of boolean Series as conditions
conds = [df.ColA.eq(i) for i in values_to_map]
# List of Series to choose from depending on conds
choices = [df.ColB.map(d) for d in [d1,d2,d3]]
# use np.select to select form the choice list based on conds
df['ColB'] = np.select(conds, choices)

导致:

    ColA ColB
0 1 a
1 2 f
2 2 e
3 1 b
4 3 i
5 3 g

关于python - 使用两个字典映射列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55905743/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com