Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Loading...

dataframe, catégories et dimensions


groupement par critère unique

<ArrowStringArray> ['male', 'female'] Length: 2, dtype: str
<pandas.api.typing.DataFrameGroupBy object at 0x7f927d3d5a90>

accès aux sous-dataframes

Sex female 314 male 577 dtype: int64
True
female (314, 11)
male (577, 11)

proxying : propagation de fonctions sur les sous-dataframes

Sex female 63.0 male 80.0 Name: Age, dtype: float64
Loading...

accéder à un groupe

True
Loading...

groupement multi-critères

Pclass Sex 1 female 94 male 122 2 female 76 male 108 3 female 144 male 347 dtype: int64

multi-index pour les multi-critères

pandas.Series
MultiIndex([(1, 'female'), (1, 'male'), (2, 'female'), (2, 'male'), (3, 'female'), (3, 'male')], names=['Pclass', 'Sex'])
{(np.int64(1), 'female'), (np.int64(1), 'male'), (np.int64(2), 'female'), (np.int64(2), 'male'), (np.int64(3), 'female'), (np.int64(3), 'male')}
True

les éléments de l’index sont des tuples

there were 94 female in class 1 
there were 122 male in class 1 
there were 76 female in class 2 
there were 108 male in class 2 
there were 144 female in class 3 
there were 347 male in class 3 

voyez l’exercice sur les partitions groupby déplacé en fin de notebook

catégorie à partir d’une colonne numérique

découpage en intervalles d’une colonne

PassengerId 552 (19.0, 55.0] 638 (19.0, 55.0] 499 (19.0, 55.0] 261 NaN 395 (19.0, 55.0] ... 463 (19.0, 55.0] 287 (19.0, 55.0] 326 (19.0, 55.0] 396 (19.0, 55.0] 832 (0.0, 12.0] Name: Age, Length: 891, dtype: category Categories (4, interval[int64, right]): [(0, 12] < (12, 19] < (19, 55] < (55, 100]]
PassengerId 552 adult 638 adult 499 adult 261 NaN 395 adult ... 463 adult 287 adult 326 adult 396 adult 832 child Name: Age, Length: 891, dtype: category Categories (4, str): ['child' < 'young' < 'adult' < '55+']
CategoricalDtype(categories=['child', 'young', 'adult', '55+'], ordered=True, categories_dtype=str)
avant Index(['Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp', 'Parch', 'Ticket',
       'Fare', 'Cabin', 'Embarked', 'Age-class'],
      dtype='str')
après Index(['Survived', 'Pclass', 'Name', 'Sex', 'SibSp', 'Parch', 'Ticket', 'Fare',
       'Cabin', 'Embarked', 'Age-class'],
      dtype='str')

groupement avec ces intervalles

pivot_table()

Loading...

pivot_table() et agrégation

pivot_table() et multiples critères

groupby.filter() - optionnel

titanic has 891 items
group ('female', 1) has 94 matches
group ('female', 2) has 76 matches
group ('female', 3) has 144 matches
group ('male', 1) has 122 matches
group ('male', 2) has 108 matches
group ('male', 3) has 347 matches

on doit donc ne retenir que 94+76 = 170 personnes

True

groupby.transform() - optionnel

Loading...
===== avant: on a 177 âges indéterminés
et les moyennes d'âges par groupe sont de
Loading...

===== après: on a 0 ages indéterminés
et les moyennes d'âges par groupe sont de
Loading...

pour résumer

pour en savoir plus

exercice sur groupby()

on veut calculer la partition de la dataframe du titanic avec comme critères:
la classe Pclass, le genre Sex, et l’état de survie Survived

  1. sans calculer la partition
    proposez une manière de calculer le nombre probable de sous parties dans la partition

  1. calculez la partition avec df.groupby
    et affichez les nombres d’items par groupe

  1. affichez la dataframe des entrées pour les femmes qui ont péri et qui voyagaient en 1ère classe

  1. révision: refaites la même extraction sans utiliser un groupby() en utilisant un masque

  1. pour les élèves avancés
    créez un dict avec les taux de survie par genre dans chaque classe

    vous devez obtenir quelque chose de ce genre

    {('female', 1): 0.96,
     ('female', 2): 0.92,
     ('female', 3): 0.5,
     ('male', 1): 0.36,
     ('male', 2): 0.15,
     ('male', 3): 0.13}
  1. pour les élèves avancés
    créez à partir de ce dict une pandas.Series
    avec comme nom 'taux de survie par genre dans chaque classe'
    indice: comme tous les types en Python
    pd.Series() permet de créer des objets par programme
    voyez la documentation de pd.Series

exercice sur pivot_table()

Loading...
  1. affichez les valeurs min, max, et moyenne, de la colonne ‘magnesium’

  1. définissez deux catégories selon que le magnesium est en dessous ou au-dessus de la moyenne (qu’on appelle mag-low et mag-high); rangez le résultat dans une colonne mag-cat

  1. calculez cette table