Учитывая фрейм данных df, он содержит следующие столбцы: col1, col2, col3
Col1 содержит строковые значения (возможные повторяющиеся значения), как показано ниже:
Val1
Val2
Val3
Val1
Val1
Val1
Кроме того, у меня есть словарь, в котором хранится сопоставление Col1 -> новые значения, которые мне нужно добавить в фрейм данных «df». Пример :
{
"Val1" : "new_val1",
"Val2" : "new_val2",
"Val3" : "new_val3",
}
Теперь, основываясь на отображении словаря, я хочу добавить «col_new» к «df». Пример окончательного кадра данных (показаны только соответствующие столбцы):
col1 col_new
Val1 new_val1
Val2 new_val2
Val3 new_val3
Val1 new_val1
Val1 new_val1
Val1 new_val1
Я пробовал df.map(), но, похоже, это работает только тогда, когда ключевой столбец в фрейме данных уникален.
Предложения ?
Это должно сработать, используйте map
:
your_dict = {
"Val1" : "new_val1",
"Val2" : "new_val2",
"Val3" : "new_val3",
}
df['col_new'] = df['col1'].map(your_dict)
какой prints
ваш желаемый результат:
col1 col_new
0 Val1 new_val1
1 Val2 new_val2
2 Val3 new_val3
3 Val1 new_val1
4 Val1 new_val1
5 Val1 new_val1
Странно, что это не работает, я использую эту команду почти каждый день. На моем работает идеально. Какая у вас версия pandas
и python
?
Это была проблема с моей стороны, я неправильно определил свой словарь; любой способ пометить этот вопрос как недействительный? (P.S. спасибо за помощь)
В дополнение к ответу @sophods вы также можете
df['col_new'] = df['col1'].apply(lambda x:your_dict[x])
Добавлено на основе комментария
import pandas as pd
df=pd.DataFrame({'col1':['Val1','Val2','Val3','Val1','Val1','Val1']})
your_dict = {
"Val1" : "new_val1",
"Val2" : "new_val2",
"Val3" : "new_val3",
}
df['col_new'] = df['col1'].apply(lambda x:your_dict[x])
print(df)
выход
col1 col_new
0 Val1 new_val1
1 Val2 new_val2
2 Val3 new_val3
3 Val1 new_val1
4 Val1 new_val1
5 Val1 new_val1
df['col_new'] = df['col1'].apply(lambda x:your_dict[x]) возвращает ошибку: Файл "/Library/Python/3.8/site-packages/pandas/core/series.py", строка 4213, в apply mapped = lib.map_infer(values, f, convert=convert_dtype) Файл "pandas/_libs/lib.pyx", строка 2403, в файле pandas._libs.lib.map_infer "cn.py", строка 73 , в <lambda> df['col_new'] = df['col1'].apply(lambda x:your_dict[x]) TypeError: объект 'set' не подлежит подписке
Я добавил полный код, в котором я получаю результат - добро пожаловать.
Строка df['col_new'] = df['col1'].map(your_dict) возвращает ошибку: Файл "/Library/Python/3.8/site-packages/pandas/core/series.py", строка 3983, на карте new_values = super()._map_values(arg, na_action=na_action) Файл "/Library/Python/3.8/site-packages/pandas/core/base.py", строка 1160, в _map_values new_values = map_f(values, mapper) Файл «pandas/_libs/lib.pyx», строка 2403, в pandas._libs.lib.map_infer TypeError: объект «set» не вызывается