Агрегировать данные и рассчитывать для каждой категории - PullRequest
0 голосов
/ 20 мая 2018

У меня есть следующий фрейм данных:

time             city             
2018-05-8        sydney        
2018-05-8        sydney
2018-05-8        melbourne
2018-05-9        sydney
2018-05-9        melbourne 

Я пытаюсь получить следующее:

time             syndey_count  melbourne_count 
2018-05-8        2             1
2018-05-9        1             1

Пока мне удалось сгруппировать по времени, а затем агрегировать поcity:

df.groupby('time').agg({'city': 'count'})

но это просто дает мне:

time             city  
2018-05-8        3             
2018-05-9        2             

Ответы [ 3 ]

0 голосов
/ 20 мая 2018

Другое решение

df.groupby(['time', 'city']).size().unstack().add_suffix('_count')
0 голосов
/ 20 мая 2018

Просто crosstab

pd.crosstab(df.time,df.city)
Out[77]: 
city       melbourne  sydney
time                        
2018-05-8          1       2
2018-05-9          1       1
0 голосов
/ 20 мая 2018

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

In [53]: df.groupby('time').city.value_counts().unstack(level=1).add_suffix('_count')
    ...: 
Out[53]: 
city       melbourne_count  sydney_count
time                                    
2018-05-8                1             2
2018-05-9                1             1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...