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

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

Вот мой код:

def alter_C(row):
    if row['A'].shift(1) == row['B'] :
           row['C'] = 'new_value'
           return row

df = df.groupby(id).apply(alter_C)

Я получаю сообщение об ошибке:

ValueError: Значение истинности Серии неоднозначно. Используйте a.empty, a.bool (), a.item (), a.any () или a.all ().

Не могли бы вы помочь, пожалуйста?

1 Ответ

0 голосов
/ 04 мая 2020

При использовании apply после groupby входом функции будет кадр данных. Так что row в вашей функции - это не одна строка. Вы можете проверить это, запустив type(row), что даст вам <class 'pandas.core.frame.DataFrame'>.

. Поэтому при изменении столбца C нам нужно обрабатывать row как информационный фрейм. Это можно сделать следующим образом:

def alter_C(df_group):
    df_group.loc[df_group['A'].shift(1) == df_group['B'], 'C'] = 'new_value'
    return df_group

df = df.groupby('id').apply(alter_C)
...