установка значений в фрейме данных Pandas с использованием loc - множественные критерии выбора, позволяющие устанавливать значения в другом столбце - PullRequest
1 голос
/ 03 октября 2019

У меня есть база данных с несколькими столбцами и строками. Я хочу найти в базе данных строки, которые соответствуют определенным критериям подмножества столбцов И если он удовлетворяет этим критериям, измените значение другого столбца в той же строке.

Я создаю прототип с использованием следующей базы данных '''

df = pd.DataFrame([[1, 2], [4, 5], [5, 5], [5, 9], [55, 55]], columns=['max_speed', 'shield'])
df['frcst_stus'] = 'current'
df

'' ', который дает следующий результат:

max_speed   shield  frcst_stus
0   1   2   current
1   4   5   current
2   5   5   current
3   5   9   current
4   55  55  current

Я хочу изменить строку индекса 2 на 5, 5, «привет», не изменяя остальныефрейм данных.

Я могу сделать примеры в документации Pandas.loc при настройке значений. Я могу установить строку, столбец и строки, соответствующие условию вызова. Но вызов на один столбец или серию. Я хочу два.

И я нашел несколько ответов от stackoverflow, которые отвечают на вопрос, используя loc в одном столбце, чтобы установить значение во втором столбце. Это не моя проблема. Я хочу выполнить поиск в двух столбцах данных.

Следующее позволяет мне получить нужную строку: '' '

result = df[(df['shield'] == 5) & (df['max_speed'] == 5) & (df['frcst_stus'] == 'current')]

' '' И я знаю, что просто изменив значениезнаки (== 'current') to (= 'current') дают мне ошибку.

И когда я выбираю два столбца, я могу установить столбцы (см. ниже), но оба столбца будут установлены. ('arghh'), и когда я пытаюсь проверить значение 'max_speed', я получаю ложное сообщение об ошибке индекса. '' 'df.loc [:, [' max_speed ',' frcst_stus ']] =' hello '

' ''

Я также получаю сообщение об ошибке, пытаясь объяснить логические проблемы сPython. Честно говоря, я пока не понимаю всей перегрузки.

Я пытаюсь соблюдать требования к форматированию, пожалуйста, дайте мне знать, если я нарушаю требования к форматированию Stackoverflow.

1 Ответ

1 голос
/ 03 октября 2019

Если необходимо установить разные значения для обоих столбцов по маске m:

m = (df['shield'] == 5) & (df['max_speed'] == 5) & (df['frcst_stus'] == 'current')

df.loc[m, ['max_speed', 'frcst_stus']] = [100, 'hello']

Если необходимо задать одинаковые значения для обоих столбцов по маске m:

df.loc[m, ['max_speed', 'frcst_stus']] = 'hello'

Если необходимо задать только один столбец по маске m:

df.loc[m, 'frcst_stus'] = 'hello'
...