当列为列表或集合时,重新映射Pandas列中的值

知识

当前有一个堆栈溢出答案,该答案解释了如何使用单个值列的dict重新映射熊猫列中的值。我想知道如何有效地将其扩展到由列表组成的列

 di = {1: "A", 2: "B"}
     col1   col2
0       w      a
1       [1,2]      2
2       [2,2]    NaN        

transform to this 
 col1   col2
0       w      a
1       [A,A]      2
2       [B,B]    NaN
耶斯列尔

如果想更换,如果在列表中匹配值,用get在列表理解与筛选器列表isinstance

f = lambda x: [di.get(y,y) for y in x] if isinstance(x, list) else x
df['col1'] = df['col1'].apply(f)
print (df)
     col1 col2
0       w    a
1  [A, B]    2
2  [B, B]  NaN

还有一些其他解决方案,如果不匹配,会发生什么情况,请添加3到列表中:

print (df)
        col1 col2
0          w    a
1     [1, 2]    2
2  [2, 2, 3]  NaN

#if no match return original, here 3
f1 = lambda x: [di.get(y,y) for y in x] if isinstance(x, list) else x
df['col11'] = df['col1'].apply(f1)

#if no match return None
f2 = lambda x: [di.get(y,None) for y in x] if isinstance(x, list) else x
df['col12'] = df['col1'].apply(f2)

#if no match remove not match value
f3 = lambda x: [di[y] for y in x if y in di] if isinstance(x, list) else x
df['col13'] = df['col1'].apply(f3)
print (df)
        col1 col2      col11         col12   col13
0          w    a          w             w       w
1     [1, 2]    2     [A, B]        [A, B]  [A, B]
2  [2, 2, 3]  NaN  [B, B, 3]  [B, B, None]  [B, B]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何以其他列为条件重新分配pandas列中的值?

将值-字典重新映射到Pandas中的列

传递值列表以在Python中重新映射

Pandas DataFrame列值重新映射

在Spring Boot中使用ModelMapper映射列表集合时的问题

Pandas 数据框 - 将行索引值重新排列为列标题

将列表列表中的值映射到 Pandas 数据框列

熊猫-列表中dict值的映射列

在Pandas DataFrame列的列表中映射JSON

熊猫根据字典重新映射或替换,但字典值对在列表中

在Python Pandas中从Excel导入,并将元数据标题重新排列为列数据

在 Pandas 中聚合以创建集合时忽略 NaT

当ItemSource是可观察的集合时,从DataGrid中隐藏列

用字典重新映射熊猫列中的值

熊猫将数据重新排列为相同值的列

将CSV中的列重新排列为新行

基于行值迭代重新计算pandas中列的值

如果另一个列值在列表或集合中,则使用二进制值在pandas数据框中填充新列

将集合映射到 javascript 中的值

从第三列为1的另一列中的最后一个值创建pandas df列

Pandas DataFrame中列的值列表

在 Pandas 列中输入列表值

如何将数组中的值列表重新映射到 NumPy 中的另一个值列表?

通过列的值映射 Pandas 数据框中的重复行?

根据列值和映射列名在 Pandas 中拆分行

列为YAML中的值

使用python pandas在数据框中使用多个字典重新映射多个列值

在ES5中将JS对象用作集合时,值类型的效率

Elixir EEx:在循环映射或集合时确定当前迭代