Заменить значения в столбце панд

У меня есть df:

здание здание:использовать промышленный Никто офис Никто полиция Никто дом Никто церковь Жилой ... ...

Как бы я заменил building на building:use тогда и только тогда, когда building:use является жилым?

Новый df буду признателен.

Не могли бы вы предоставить ожидаемый результат? Возможно, вы имели в виду, что если в столбце building:use есть residential, то ту же строку в столбце building (church в примере выше) следует изменить на residential

tax evader 28.07.2024 20:37
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
71
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я создал df2, как вы указали, желая нового df.

df2 = df.copy()
df_res = df2[df2['building:use'] == 'residential']
df2.loc[df_res.index, 'building'] = df_res['building:use'] 

Для справки: ваш пример набора данных

import pandas as pd

df = pd.DataFrame(
    {
        "building": ["industrial", "office", "police", "house", "church"],
        "building:use": [None, None, None, None, "residential"],
    }
)

Я благодарен @dydev за пример формата набора данных. Спасибо. У меня были проблемы с форматированием таблицы. Будет ли «df_res… != None» выбирать все значения, кроме «Нет»?

arkriger 29.07.2024 09:37
df2[~df2['building:use'].isna()] выберет все значения, которые не равны нулю (или None в данном случае).
dydev 29.07.2024 13:00

Зачем создавать df_res (который мог бы занять много места, если бы настоящий df был очень большим), если можно просто использовать фильтр напрямую? df2.loc[df2['building:use'] == 'residential', 'building'] = df2['building:use']

wjandrea 29.07.2024 19:34

Это просто первое решение, которое пришло в голову. ОП не уточнил необходимость оптимизации из-за большого набора данных.

dydev 29.07.2024 20:55

Вы можете использовать Series.mask() (или .where()) для замены значений в столбце на основе условия:

building1 = df['building'].mask(
    df['building:use'] == 'residential',
    df['building:use'])
0     industrial
1         office
2         police
3          house
4    residential
Name: building, dtype: object

Затем, чтобы создать новый фрейм данных с измененным столбцом, вы можете использовать df.assign():

df1 = df.assign(building=building1)
      building building:use
0   industrial         None
1       office         None
2       police         None
3        house         None
4  residential  residential

Спасибо @wjandrea. Тот же вопрос, что и ниже. Если я хочу выбрать все значения, кроме None, изменится ли условие building1 = ...df['building:use'] != None,...?

arkriger 29.07.2024 18:58

@arkriger На самом деле это гораздо более сложный вопрос :) Это на самом деле None или строки, 'None'? Мой ответ не содержит никаких предположений по этому поводу. Если это на самом деле None, читали ли вы страницу руководства пользователя о недостающих данных ? Возможно ли, что столбец содержит NaN? Это слишком много, чтобы обсуждать это в комментариях, поэтому вы можете задать новый вопрос, если хотите. Обязательно сделайте воспроизводимый пример панд.

wjandrea 29.07.2024 19:24

Другие вопросы по теме