Применение pandas GroupBy со смешанными логическими и числовыми значениями - PullRequest
0 голосов
/ 16 июня 2020

Как я могу применить pandas groupby к столбцам, которые являются числовыми и логическими? Я хочу суммировать числовые столбцы, и я хочу, чтобы агрегирование логических значений было any, то есть True, если есть какие-либо истины и False, если есть только False.

Ответы [ 2 ]

0 голосов
/ 16 июня 2020

Вы можете выбрать функции, по которым вы агрегируете, с помощью следующего:

df.groupby("id").agg({
    "bool":lambda arr: any(arr),
    "c":sum,
    })

0 голосов
/ 16 июня 2020

Выполнение агрегирования sum даст желаемый результат, если вы приведете логические столбцы обратно к логическим типам. Пример

df = pd.DataFrame({'id': [1, 1, 2, 2, 3, 3],
 'bool': [True, False, True, True, False, False],
 'c': [10, 10, 15, 15, 20, 20]})

       id   bool   c
    0   1   True  10
    1   1  False  10
    2   2   True  15
    3   2   True  15
    4   3  False  20
    5   3  False  20

    df.groupby('id').sum()
        bool   c
    id          
    1    1.0  20
    2    2.0  30
    3    0.0  40

Как видите, при применении суммы True приводится к 1, а False - к нулю. Это эффективно действует как желаемая операция any. Возврат к логическому:

df['bool'] = df['bool'].astype(bool)

   id   bool   c
0   1   True  10
1   1  False  10
2   2   True  15
3   2   True  15
4   3  False  20
5   3  False  20
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...