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)
d = {**{(1, k): v for k, v in d1.items()}, **{(2, k): v for k, v in d2.items()}}
df.assign(ColB=[*map(d.get, zip(df.ColA, df.ColB))])
ColA ColB
0 1 a
1 2 f
2 2 e
3 1 b
4 1 c
5 2 d
一种方法是使用^{} 来}的值:
map
使用一个字典或另一个字典来ColB
中的值,具体取决于{它给出了:
^{pr2}$对于更一般的解决方案,可以使用^{} ,它适用于多个条件。让我们在
ColA
和字典中添加另一个值,以了解如何使用三种不同的映射来实现这一点:导致:
您可以使用一个键为
tuple
s的新字典,并将其映射到压缩列。在或者我们可以用一个lambda来绘制地图。
^{pr2}$注意:我根据字典在列表
[0, d1, d2]
中的相对位置,将它们对齐以在它们之间切换。在这种情况下,什么在第一位置并不重要。我任意地放0
。在为了提高健壮性,我会远离cute并映射一个具有默认值功能的lambda
如果需要对多个组执行此操作,请使用
dict
的dict
来分别映射每个组。理想情况下,您可以找到一些功能性方法来创建d
:输出:
^{pr2}$相关问题 更多 >
编程相关推荐