Как поменять значения в столбце "name" на значения из столбца "category" при помощи функции?
Есть датафрейм в котором хранятся данные о точках общественного питания. Для некоторых ресторанов под названием "кафе" не совпадает категория этого самого ресторана.
Если название ресторана "кафе" а категория "бар,паб" то название следует заменить на "бар,паб" и аналогично для всех значений по списку (все значения в столбце "name" == "кафе")
Всего уникальных значений категорий общественного питания 8:
- кафе
- ресторан
- кофейня
- бар.паб
- пиццерия
- быстрое питание
- столовая
- булочная
Хочу обернуть в собственную функцию данную процедуру, но не могу сообразить как это сделать.
def change_name(value):
name = value['category']
if name !=
Ответы (1 шт):
Вариант 1 - выбрать все строки с "Кафе" df.name.eq('Кафе'), где имя не равно категории ~df.name.eq(df.category), и имена приравнять категориям:
df = pd.DataFrame({'name': ['Кафе'] * 6, 'category': ['Кафе', 'бар,паб'] * 3})
df.loc[mask, 'name'] = df.loc[(mask := df.name.eq('Кафе') & ~df.name.eq(df.category)), 'category']
print(df)
Вариант 2 - учитывая, что название категории всегда первично, можно упростить выражение, удалив второе условие. В этом случае все "Кафе" в колонке name будут заменены на соответствующие названия из колонки category:
df.loc[mask, 'name'] = df.loc[(mask := df.name.eq('Кафе')), 'category']
name category
0 Кафе Кафе
1 бар,паб бар,паб
2 Кафе Кафе
3 бар,паб бар,паб
4 Кафе Кафе
5 бар,паб бар,паб
Функцию, на мой взгляд, для этого делать нецелесообразно, поскольку ее применение замедлит выполнение.
