Вот еще один способ обмануть этого кота, используя словарь для отображения новых значений на клавиши в списке:
def map_values(row, values_dict):
return values_dict[row]
values_dict = {'A': 1, 'B': 2, 'C': 3, 'D': 4}
df = pd.DataFrame({'INDICATOR': ['A', 'B', 'C', 'D'], 'VALUE': [10, 9, 8, 7]})
df['NEW_VALUE'] = df['INDICATOR'].apply(map_values, args = (values_dict,))
Как это выглядит:
df
Out[2]:
INDICATOR VALUE NEW_VALUE
0 A 10 1
1 B 9 2
2 C 8 3
3 D 7 4
Этот подход может быть очень сильным, когда у вас есть много операторов ifelse
-типов, чтобы сделать (то есть множество уникальных значений для замены).
И, конечно же, вы всегда можете это сделать:
df['NEW_VALUE'] = df['INDICATOR'].map(values_dict)
Но этот подход более чем в три раза медленнее, чем подход apply
сверху, на моей машине.
И вы также можете сделать это, используя dict.get
:
df['NEW_VALUE'] = [values_dict.get(v, None) for v in df['INDICATOR']]