有没有办法在一次调用中传递列的列表来映射字典的值?
我可以通过陈述每一列来做到这一点,但我想知道我是否可以缩短语法.
查看了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
我想将此映射应用于col1
和col2
,而不是col3
:
name_dict = {'PHX' : 'PHO', 'BKN': 'NJN'}
所以是PHX -> PHO
和BKN -> 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'
.
所需输出(更新col1
和col2
值,但不更新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