Сравнение последовательных строк данных на основе столбцов в Python

Похоже, что только удаление фигурной скобки поможет решить вашу проблему. Нам нужно будет увидеть больше кода, чтобы быть уверенным, что это ваша проблема.

0
задан frisbeee 18 January 2019 в 23:58
поделиться

1 ответ

Если у вас есть все ваши данные в одном кадре данных, df, вы можете сделать следующее:

grp_by_cols = ['Supplier', 'ID', 'Grp']
all_cols = grp_by_cols + ['Unit']
res_df = df.assign(first_unit=lambda df: df.loc[:, all_cols]
                                           .groupby(grp_by_cols)
                                           .transform('first'))\
           .assign(incorrect=lambda df: df['Unit'] == df['first_unit'])\
           .assign(incorrect=lambda df: df.loc[:, grp_by_cols + ['incorrect']])\
                                          .groupby(grp_by_cols)
                                          .transform(np.any))

При первом вызове assign добавляется один новый столбец (называемый 'first_unit'. ]) это первое значение «Единицы» для каждой группы Поставщика / ID / Grp (см. grp_by_cols).

Второй вызов assign добавляет столбец с именем 'incorrect', то есть True, когда 'Unit' не равен 'first_unit'. Третий и последний вызов assign заменяет этот столбец на True, если любых строк в этой группе равны True. Вы можете удалить это, если это не то, что вы хотите.

Затем, если вы хотите посмотреть на результаты для одного поставщика, вы можете сделать что-то вроде:

res_df.query('Supplier = "Authentic Brands Group"')
0
ответ дан PMende 18 January 2019 в 23:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: