Pandas DataFrame Groupby: как посчитать количество сгруппированных строк, соответствующих условию - PullRequest
0 голосов
/ 23 апреля 2020

Я хочу сгруппировать строки по «Возрасту» и вернуть счет 1) сколько строк составляют каждую группу и 2) сколько из этих строк соответствует условию.

Учитывая DataFrame, который выглядит следующим образом:

    Age     Died
0   26      0
1   26      0
2   27      1
3   28      0
4   28      1
5   28      1

Я хочу вернуть DataFrame, который выглядит следующим образом:

   Age     Count    Died_Count
   26        2        0
   27        1        1
   28        3        2

Я пробовал многочисленные комбинации различных groupbys, таких как groupby(['Age', 'Died']) с различными агрегаторы (sum, count), но не может найти выигрышную комбинацию. Может ли кто-нибудь указать мне правильное направление?

Ответы [ 2 ]

4 голосов
/ 23 апреля 2020

Вы можете использовать namedagg:

(
    df.groupby('Age')
    .agg(Count=('Died', 'size'),
        Died_count=('Died', 'sum'))
    .reset_index()
)
2 голосов
/ 23 апреля 2020

Предположим, что ваш фрейм данных df

res=df.groupby("Age").agg({'Age': 'count', 'Died': 'sum'}).rename(columns={"Age":"Count"})

output

        Count  Died
Age             
26       2     0
27       1     1
28       3     2

Вы можете сбросить индекс и установить для столбца Age также.

res = res.reset_index(drop=False)

вывод

   Age  Count  Died
0   26      2     0
1   27      1     1
2   28      3     2
...