Как использовать агрегат с условием в пандах? - PullRequest
1 голос
/ 23 октября 2019

У меня есть датафрейм. Следующий код работает

stat = working_data.groupby(by=['url', 'bucket_id'], 
                            as_index=False).agg({'delta': 'max','id': 'count'})

Теперь мне нужно посчитать идентификаторы с разными статусами. У меня есть «ЗАГРУЗЕНО», «НЕ_УКАЗАНО» и «ЗАГРУЗКА» для статуса.

Я хотел бы иметь df со столбцами bucket_id, max, downloaded (у скольких из них «СКАЧАТЬ»«status», not_downloaded (сколько имеет статус «NOT_DOWNLOADED»), downloading (сколько имеет статус «DOWNLOADING»). Как это сделать?

Входные данные у меня есть: enter image description here.

Выходные данные у меня есть: enter image description here

Как видите, количество не делится на статус. Но я хочу знать, что x загружено, y not_downloaded, z загружается для каждого bucket_id bucket_id (поэтому они должны быть в отдельных столбцах, но информация для одного bucket_id должна находиться в одной строке)

1 Ответ

0 голосов
/ 23 октября 2019

Один из способов использовать присвоение для создания столбцов, а затем агрегировать этот новый столбец.

working_data.assign(downloaded=df['status'] == 'DOWNLOADED', 
                   not_downloaded=df['status'] == 'NOT_DOWNLOADED',
                   downloading=df['status'] == 'DOWNLOADING')\
            .groupby(by=['url', 'bucket_id'], 
                        as_index=False).agg({'delta': 'max',
                                             'id': 'count',
                                             'downloaded': 'sum',
                                             'not_donwloaded':'sum',
                                             'downloading':'sum'})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...