有没有办法在一次调用中传递列的列表来映射字典的值?

我可以通过陈述每一列来做到这一点,但我想知道我是否可以缩短语法.

查看了this post个以供参考.

样本数据:

import pandas as pd
 
# initialize data of lists.
data = {'id': ['a', 'b', 'c', 'd', 'e'],
        'col1': ['PHX', 'BKN', 'X', 'PHX', 'X'],
        'col2': ['X', 'PHX', 'BKN', 'BKN', 'X'],
        'col3': ['PHX', 'BKN', 'PHX', 'BKN', 'PHX']
       }
 
df = pd.DataFrame(data)
df

  id col1 col2 col3
0  a  PHX    X  PHX
1  b  BKN  PHX  BKN
2  c    X  BKN  PHX
3  d  PHX  BKN  BKN
4  e    X    X  PHX

我想将此映射应用于col1col2,而不是col3:

name_dict = {'PHX' : 'PHO', 'BKN': 'NJN'}

所以是PHX -> PHOBKN -> NJN.

这将替换所有的列,但我需要列的子集:

df = df.replace(name_dict)

菊花链"替换"起作用了:

df = df.replace({'col1': name_dict}).replace({'col2': name_dict})

这也是可行的:

df = df.replace({'col1': name_dict, 'col2': name_dict})

我能把它缩短一点吗,比如:

df = df.replace({['col1', 'col2']: name_dict})

然而,这将导致TypeError: unhashable type: 'list'.

所需输出(更新col1col2值,但不更新col3):

  id col1 col2 col3
0  a  PHO    X  PHX
1  b  NJN  PHO  BKN
2  c    X  NJN  PHX
3  d  PHO  NJN  BKN
4  e    X    X  PHX

推荐答案

使用dict.fromkeys:

df.replace(dict.fromkeys(['col1', 'col2'], name_dict))

或者,如果要使用列列表进行修改,请执行以下操作:

cols = ['col1', 'col2']
df[cols] = df[cols].replace(name_dict)

输出:

  id col1 col2 col3
0  a  PHO    X  PHX
1  b  NJN  PHO  BKN
2  c    X  NJN  PHX
3  d  PHO  NJN  BKN
4  e    X    X  PHX

Python相关问答推荐

无法定位元素错误404

如何获取numpy数组的特定索引值?

在极性中创建条件累积和

将输入聚合到统一词典中

在pandas中使用group_by,但有条件

如何使regex代码只适用于空的目标单元格

Gekko中基于时间的间隔约束

如何在GEKKO中使用复共轭物

如何强制向量中的特定元素在Gekko中处于优化解决方案中

如何获得3D点的平移和旋转,给定的点已经旋转?

提取数组每行的非零元素

如何在信号的FFT中获得正确的频率幅值

解析CSV文件以将详细信息添加到XML文件

`Convert_time_zone`函数用于根据为极点中的每一行指定的时区检索值

以元组为索引的Numpy多维索引

在FastAPI/Starlette中使用WebSockets时如何运行后台任务?

属性错误:';Styler';对象没有属性';样式';

django中没有预期的输出

try 理解PyTorch运行错误:try 再次向后遍历图表

Windows与pwd.getpwuid有什么类似功能?