Je souhaite rééchantillonner un dataframe par date et créer une colonne basée sur la somme agrégée de city df:

+-----------------+-------------------+------------+
| booking_date    |  Cities           |  province  | 
+-----------------+-------------------+------------+
|  15-12-17       |  Kota Depok       | Jawa Barat |    
|  15-12-17       |  Bogor            | Jawa Barat |      
|  15-12-17       |  Kota Depok       | Jawa Barat |     
|  15-12-17       |  Kota Bandung     | Jawa Barat |    
|  15-12-17       |  Kota Bandung     | Jawa Barat |   
+-----------------+-------------------+------------+

La sortie peut ressembler à ceci:

df:

+-----------------+-------------------+------------+------------+
| booking_date    |  Cities           |  province  |  Count     | 
+-----------------+-------------------+------------+------------+
|  15-12-17       |  Kota Depok       | Jawa Barat |  2         |
|  15-12-17       |  Bogor            | Jawa Barat |  1         |
|  15-12-17       |  Kota Bandung     | Jawa Barat |  2         | 
+-----------------+-------------------+------------+------------+

Comment y parvenir?

2
ebuzz168 10 avril 2020 à 14:40

2 réponses

Meilleure réponse

Utilisez GroupBy.size avec Series.reset_index et paramètre name:

df = df.groupby(['booking_date','Cities','province']).size().reset_index(name='Count')
2
jezrael 10 avril 2020 à 11:49

La première solution qui m'est venue à l'esprit était la même que celle de @ jezrael. Cependant, un autre pourrait être celui combinant pandas.DataFrame.assign(), pandas.Series.map(), pandas.Series.value_counts() et pandas.DataFrame.drop_duplicates().

Le code suit.

>>> df = df\
...     .assign(Count = df['Cities'].map(df['Cities'].value_counts()))\
...     .drop_duplicates()
>>> print(df)
  booking_date        Cities    province  Count
0     15-12-17    Kota Depok  Jawa Barat      2
1     15-12-17         Bogor  Jawa Barat      1
3     15-12-17  Kota Bandung  Jawa Barat      2
1
Jaroslav Bezděk 10 avril 2020 à 12:04