我有一个键和值的字典。我想“映射”数据框列中的数字,其中原始列是键,新列是值。
但是,字典中不的任何值都应编码为 999。
原始数据框:
Col1
0 02
1 03
2 02
3 02
4 04
5 88
6 77
字典:
codes = {'01':'05',
'02':'06',
'03':'07',
'04':'08'}
预期输出:
>>> df['ColNew'] = df['Col1'].map(codes)
ColNew
0 06
1 07
2 06
3 06
4 08
5 999
6 999
除了首先将 999 代码包含在字典中之外,我不确定该怎么做。当涉及超过一百个代码并且其中只有少数需要是 999 以外的任何代码时,这令人沮丧。
最佳答案
使用 map
和 dict.get
dict.get
允许您在 key
不存在的情况下传递默认值。
df['ColNew'] = df['Col1'].map(lambda x: codes.get(x, 999))
df
Col1 ColNew
0 02 06
1 03 07
2 02 06
3 02 06
4 04 08
5 88 999
6 77 999
这也将保留 dtypes
。在这种情况下,这无关紧要,因为该列的 dtype
是 object
。
但是,如果它是int
,当NaN
返回时,map
会把它变成float
。通过使用默认值,我们避免了类型转换。
关于python - Pandas :映射到新列,不包括一些代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43395390/