Skip to content

Dans pandas, la mรฉthode ๐ โ€Œ๐ซโ€Œ๐จโ€Œ๐ฎโ€Œ๐ฉโ€Œ๐›โ€Œ๐ฒโ€Œ() permet de regrouper les donnรฉes dans D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ et S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ .

Cette mรฉthode permet d’agrรฉger des donnรฉes par groupe pour calculer des mesures statistiques telles que des moyennes, des minimums, des maximums et des totaux, ou pour appliquer des fonctions.

La version pandas utilisรฉe dans cet article est la suivante. Notez que les fonctionnalitรฉs peuvent varier selon les versions. Le D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ suivant est utilisรฉ comme exemple.

import pandas as pd print(pd.__version__) # 2.1.2 df = pd.DataFrame( {'c_0': ['A', 'A', 'B', 'B', 'B', 'B'], 'c_1': ['X', 'Y', 'X', 'Y', 'X', 'Y'], 'c_2': [0, 1, 4, 9, 16, 25], 'c_3': [125, 64, 27, 16, 1, 0]}, index=['r_0', 'r_1', 'r_2', 'r_3', 'r_4', 'r_5'] ) print(df) # c_0 c_1 c_2 c_3 # r_0 A X 0 125 # r_1 A Y 1 64 # r_2 B X 4 27 # r_3 B Y 9 16 # r_4 B X 16 1 # r_5 B Y 25 0 

Utilisation de base de ๐ โ€Œ๐ซโ€Œ๐จโ€Œ๐ฎโ€Œ๐ฉโ€Œ๐›โ€Œ๐ฒโ€Œ()

Vous pouvez regrouper des donnรฉes ร  l’aide de la mรฉthode ๐ โ€Œ๐ซโ€Œ๐จโ€Œ๐ฎโ€Œ๐ฉโ€Œ๐›โ€Œ๐ฒโ€Œ() , qui est fournie dans D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ et S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ .

Lorsque vous spรฉcifiez des noms de colonne dans le premier argument, ๐›โ€Œ๐ฒโ€Œ , les donnรฉes sont regroupรฉes selon les valeurs de cette colonne. Un objet G๐ซโ€Œ๐จโ€Œ๐ฎโ€Œ๐ฉโ€ŒB๐ฒโ€Œ est renvoyรฉ, qui n’affiche pas son contenu lors de l’impression.

grouped = df.groupby('c_0') print(grouped) # <pandas.core.groupby.generic.DataFrameGroupBy object at 0x1272139d0> print(type(grouped)) # <class 'pandas.core.groupby.generic.DataFrameGroupBy'> 

Vous pouvez traiter chaque groupe en exรฉcutant des mรฉthodes sur l’objet G๐ซโ€Œ๐จโ€Œ๐ฎโ€Œ๐ฉโ€ŒB๐ฒโ€Œ .

Par exemple, la mรฉthode ๐ฆโ€Œ๐žโ€Œ๐šโ€Œ๐งโ€Œ() calcule la moyenne de chaque groupe. Si l’argument ๐งโ€Œ๐ฎโ€Œ๐ฆโ€Œ๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐œโ€Œ_๐จโ€Œ๐งโ€Œ๐ฅโ€Œ๐ฒโ€Œ est dรฉfini sur T๐ซโ€Œ๐ฎโ€Œ๐žโ€Œ , les colonnes non numรฉriques sont ignore. Une valeur D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ est renvoyรฉe.

df_mean = grouped.mean(numeric_only=True) print(df_mean) # c_2 c_3 # c_0  # A 0.5 94.5 # B 13.5 11.0 print(type(df_mean)) # <class 'pandas.core.frame.DataFrame'> 

Il est รฉgalement possible d’รฉcrire ๐ โ€Œ๐ซโ€Œ๐จโ€Œ๐ฎโ€Œ๐ฉโ€Œ๐›โ€Œ๐ฒโ€Œ() et ses mรฉthodes successivement.

print(df.groupby('c_0').mean(numeric_only=True)) # c_2 c_3 # c_0  # A 0.5 94.5 # B 13.5 11.0 print(df.groupby('c_1').mean(numeric_only=True)) # c_2 c_3 # c_1  # X 6.666667 51.000000 # Y 11.666667 26.666667 

L’application de [๐œโ€Œ๐จโ€Œ๐ฅโ€Œ๐ฎโ€Œ๐ฆโ€Œ๐งโ€Œ_๐งโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ] ou [๐ฅโ€Œ๐ขโ€Œ๐ฌโ€Œ๐ญโ€Œ_๐จโ€Œ๐Ÿโ€Œ_๐œโ€Œ๐จโ€Œ ๐ฅโ€Œ๐ฎโ€Œ๐ฆโ€Œ๐งโ€Œ_๐งโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ๐ฌโ€Œ] ร  l’objet G๐ซโ€Œ๐จโ€Œ๐ฎโ€Œ๐ฉโ€ŒB๐ฒโ€Œ cible uniquement celles des colonnes ร  traiter. Ceci est utile lorsqu’il ya des colonnes inutiles.

print(df.groupby('c_0')['c_2'].mean()) # c_0 # A 0.5 # B 13.5 # Name: c_2, dtype: float64 print(df.groupby('c_0')[['c_2', 'c_3']].mean()) # c_2 c_3 # c_0  # A 0.5 94.5 # B 13.5 11.0 

En plus de ๐ฆโ€Œ๐žโ€Œ๐šโ€Œ๐งโ€Œ() , il existe diffรฉrentes mรฉthodes telles que ๐ฌโ€Œ๐ฎโ€Œ๐ฆโ€Œ() pour calculer les totaux et ๐œโ€Œ๐จโ€Œ๐ฎโ€Œ๐งโ€Œ๐ญโ€Œ() pour compter les valeurs non manquantes.

print(df.groupby('c_0').sum(numeric_only=True)) # c_2 c_3 # c_0  # A 1 189 # B 54 44 print(df.groupby('c_0').count()) # c_1 c_2 c_3 # c_0  # A 2 2 2 # B 4 4 4 

Pour une liste des mรฉthodes disponibles, reportez-vous ร  la documentation officielle.

La mรฉthode ๐šโ€Œ๐ โ€Œ๐ โ€Œ() pour appliquer plusieurs processus, ๐โ€Œ๐žโ€Œ๐ฌโ€Œ๐œโ€Œ๐ซโ€Œ๐ขโ€Œ๐›โ€Œ๐žโ€Œ() pour calculer plusieurs statistiques ร  la fois et ๐šโ€Œ๐ฉโ€Œ๐ฉโ€Œ๐ฅโ€Œ๐ฒโ€Œ() pour appliquer n’importe quelle fonction ร  chaque groupe sont dรฉcrites plus loin.

Grouper par plusieurs colonnes

Lorsqu’une liste de noms de colonnes est spรฉcifiรฉe comme premier argument dans ๐ โ€Œ๐ซโ€Œ๐จโ€Œ๐ฎโ€Œ๐ฉโ€Œ๐›โ€Œ๐ฒโ€Œ() , le regroupement peut รชtre effectuรฉ ร  l’aide de plusieurs colonnes.

print(df.groupby(['c_0', 'c_1']).mean()) # c_2 c_3 # c_0 c_1  # A X 0.0 125.0 # Y 1.0 64.0 # B X 10.0 14.0 # Y 17.0 8.0 

Un D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ multi-index est renvoyรฉ.

Spรฉcifiez si vous souhaitez utiliser les noms de colonnes comme index : ๐šโ€Œ๐ฌโ€Œ_๐ขโ€Œ๐งโ€Œ๐โ€Œ๐žโ€Œ๐ฑโ€Œ

Par dรฉfaut, les noms de colonnes spรฉcifiรฉs comme premier argument dans ๐ โ€Œ๐ซโ€Œ๐จโ€Œ๐ฎโ€Œ๐ฉโ€Œ๐›โ€Œ๐ฒโ€Œ() deviennent les ๐ขโ€Œ๐งโ€Œ๐โ€Œ๐žโ€Œ๐ฑโ€Œ du rรฉsultat . La dรฉfinition de l’argument ๐šโ€Œ๐ฌโ€Œ_๐ขโ€Œ๐งโ€Œ๐โ€Œ๐žโ€Œ๐ฑโ€Œ sur F๐šโ€Œ๐ฅโ€Œ๐ฌโ€Œ๐žโ€Œ empรชche cela.

print(df.groupby('c_0', as_index=False).mean(numeric_only=True)) # c_0 c_2 c_3 # 0 A 0.5 94.5 # 1 B 13.5 11.0 print(df.groupby(['c_0', 'c_1'], as_index=False).mean()) # c_0 c_1 c_2 c_3 # 0 A X 0.0 125.0 # 1 A Y 1.0 64.0 # 2 B X 10.0 14.0 # 3 B Y 17.0 8.0 

Gรฉrer les valeurs manquantes N๐šโ€ŒN : ๐โ€Œ๐ซโ€Œ๐จโ€Œ๐ฉโ€Œ๐งโ€Œ๐šโ€Œ

Si la colonne spรฉcifique comme premier argument dans ๐ โ€Œ๐ซโ€Œ๐จโ€Œ๐ฎโ€Œ๐ฉโ€Œ๐›โ€Œ๐ฒโ€Œ() contient des valeurs manquantes N๐šโ€ŒN , ces lignes sont ignorรฉes par dรฉfaut. La dรฉfinition de l’argument ๐โ€Œ๐ซโ€Œ๐จโ€Œ๐ฉโ€Œ๐งโ€Œ๐šโ€Œ sur F๐šโ€Œ๐ฅโ€Œ๐ฌโ€Œ๐žโ€Œ traite N๐šโ€ŒN comme une clรฉ.

df_nan = df.copy() df_nan.iloc[0, 1] = float('nan') df_nan.iloc[5, 1] = float('nan') print(df_nan) # c_0 c_1 c_2 c_3 # r_0 A NaN 0 125 # r_1 A Y 1 64 # r_2 B X 4 27 # r_3 B Y 9 16 # r_4 B X 16 1 # r_5 B NaN 25 0 print(df_nan.groupby(['c_0', 'c_1']).mean()) # c_2 c_3 # c_0 c_1  # A Y 1.0 64.0 # B X 10.0 14.0 # Y 9.0 16.0 print(df_nan.groupby(['c_0', 'c_1'], dropna=False).mean()) # c_2 c_3 # c_0 c_1  # A Y 1.0 64.0 # NaN 0.0 125.0 # B X 10.0 14.0 # Y 9.0 16.0 # NaN 25.0 0.0 

Consultez l’article suivant pour gรฉrer les valeurs manquantes dans pandas.

Obtention des donnรฉes dans chaque groupe : ๐ โ€Œ๐žโ€Œ๐ญโ€Œ_๐ โ€Œ๐ซโ€Œ๐จโ€Œ๐ฎโ€Œ๐ฉโ€Œ()

Vous pouvez obtenir des donnรฉes de chaque groupe ร  l’aide de la mรฉthode ๐ โ€Œ๐žโ€Œ๐ญโ€Œ_๐ โ€Œ๐ซโ€Œ๐จโ€Œ๐ฎโ€Œ๐ฉโ€Œ() de l’objet G๐ซโ€Œ๐จโ€Œ๐ฎโ€Œ๐ฉโ€ŒB๐ฒโ€Œ .

Spรฉcifiez le nom de la colonne comme argument. Si le groupe est basรฉ sur plusieurs colonnes, utilisez un tuple contenant ces noms de colonnes. Cette mรฉthode renvoie une D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ qui inclut les colonnes spรฉcifiรฉes comme clรฉs.

print(df.groupby('c_0').get_group('B')) # c_0 c_1 c_2 c_3 # r_2 B X 4 27 # r_3 B Y 9 16 # r_4 B X 16 1 # r_5 B Y 25 0 print(df.groupby(['c_0', 'c_1']).get_group(('B', 'X'))) # c_0 c_1 c_2 c_3 # r_2 B X 4 27 # r_4 B X 16 1 

Le nombre de points de donnรฉes dans chaque groupe peut รชtre obtenu ร  l’aide de la mรฉthode ๐ฌโ€Œ๐ขโ€Œ๐ณโ€Œ๐žโ€Œ() .

print(df.groupby('c_0').size()) # c_0 # A 2 # B 4 # dtype: int64 print(df.groupby(['c_0', 'c_1']).size()) # c_0 c_1 # A X 1 # Y 1 # B X 2 # Y 2 # dtype: int64 

Appliquer plusieurs processus : ๐šโ€Œ๐ โ€Œ๐ โ€Œ()

Utilisez la mรฉthode ๐šโ€Œ๐ โ€Œ๐ โ€Œ() de l’objet G๐ซโ€Œ๐จโ€Œ๐ฎโ€Œ๐ฉโ€ŒB๐ฒโ€Œ pour appliquer plusieurs processus simultanรฉment.

Vous pouvez dรฉfinir le nom de la mรฉthode de l’objet G๐ซโ€Œ๐จโ€Œ๐ฎโ€Œ๐ฉโ€ŒB๐ฒโ€Œ sous forme de chaรฎne. S’il est spรฉcifiรฉ sous forme de liste, plusieurs processus seront appliquรฉs. Il est รฉgalement possible d’appliquer diffรฉrents processus ร  chaque colonne ร  l’aide d’un dictionnaire ( ๐โ€Œ๐ขโ€Œ๐œโ€Œ๐ญโ€Œ ) avec les noms de colonnes comme clรฉs.

print(df.groupby(['c_0', 'c_1']).agg('mean')) # c_2 c_3 # c_0 c_1  # A X 0.0 125.0 # Y 1.0 64.0 # B X 10.0 14.0 # Y 17.0 8.0 print(df.groupby(['c_0', 'c_1']).agg(['mean', 'min', 'max'])) # c_2 c_3  # mean min max mean min max # c_0 c_1  # A X 0.0 0 0 125.0 125 125 # Y 1.0 1 1 64.0 64 64 # B X 10.0 4 16 14.0 1 27 # Y 17.0 9 25 8.0 0 16 print(df.groupby(['c_0', 'c_1']).agg({'c_2': 'sum', 'c_3': ['min', 'max']})) # c_2 c_3  # sum min max # c_0 c_1  # A X 0 125 125 # Y 1 64 64 # B X 20 1 27 # Y 34 0 16 

La spรฉcification d’un nom de mรฉthode inexistant entraรฎne une erreur.

# print(df.groupby(['row_0', 'row_1']).agg('xxx')) # AttributeError: 'xxx' is not a valid function for 'DataFrameGroupBy' object # print(df.groupby(['row_0', 'row_1']).agg(['xxx'])) # AttributeError: 'SeriesGroupBy' object has no attribute 'xxx' 

Comme vous pouvez le voir dans le message d’erreur ci-dessus, lorsqu’une seule chaรฎne est spรฉcifiรฉe, la mรฉthode D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€ŒG๐ซโ€Œ๐จโ€Œ๐ฎโ€Œ๐ฉโ€ŒB๐ฒโ€Œ est utilisรฉe ; Lorsqu’une liste est spรฉcifiรฉe, la mรฉthode S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€ŒG๐ซโ€Œ๐จโ€Œ๐ฎโ€Œ๐ฉโ€ŒB๐ฒโ€Œ est utilisรฉe.

Des objets appelables tels que des fonctions dรฉfinies avec des expressions ๐โ€Œ๐žโ€Œ๐Ÿโ€Œ ou lambda peuvent รฉgalement รชtre spรฉcifiรฉs.

def my_func(x): return x.max() + x.min() print(df.groupby(['c_0', 'c_1']).agg([my_func, lambda x: x.sum() - x.mean()])) # c_2 c_3  # my_func <lambda_0> my_func <lambda_0> # c_0 c_1  # A X 0 0.0 250 0.0 # Y 2 0.0 128 0.0 # B X 20 10.0 28 14.0 # Y 34 17.0 16 8.0 

Qu’il soit spรฉcifiรฉ comme un รฉlรฉment unique ou dans une liste, S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ est transmis aux objets appelables.

print(df.groupby(['c_0', 'c_1']).agg(lambda x: str(type(x))).iloc[0, 0]) # <class 'pandas.core.series.Series'> print(df.groupby(['c_0', 'c_1']).agg([lambda x: str(type(x))]).iloc[0, 0]) # <class 'pandas.core.series.Series'> print(df.groupby(['c_0', 'c_1']).agg(lambda x: str(x.values))) # c_2 c_3 # c_0 c_1  # A X [0] [125] # Y [1] [64] # B X [ 4 16] [27 1] # Y [ 9 25] [16 0] 

Calculer plusieurs statistiques : ๐โ€Œ๐žโ€Œ๐ฌโ€Œ๐œโ€Œ๐ซโ€Œ๐ขโ€Œ๐›โ€Œ๐žโ€Œ()

Utilisez la mรฉthode ๐โ€Œ๐žโ€Œ๐ฌโ€Œ๐œโ€Œ๐ซโ€Œ๐ขโ€Œ๐›โ€Œ๐žโ€Œ() de l’objet G๐ซโ€Œ๐จโ€Œ๐ฎโ€Œ๐ฉโ€ŒB๐ฒโ€Œ pour calculer simultanรฉment les statistiques clรฉs de chaque groupe. Cela est plus pratique que d’indiquer chaque statistique individuellement ร  l’aide de ๐šโ€Œ๐ โ€Œ๐ โ€Œ() .

L’exemple suivant gรฉnรจre uniquement des rรฉsultats pour la colonne ๐œโ€Œ_2 .

print(df.groupby(['c_0', 'c_1']).describe()['c_2']) # count mean std min 25% 50% 75% max # c_0 c_1  # A X 1.0 0.0 NaN 0.0 0.0 0.0 0.0 0.0 # Y 1.0 1.0 NaN 1.0 1.0 1.0 1.0 1.0 # B X 2.0 10.0 8.485281 4.0 7.0 10.0 13.0 16.0 # Y 2.0 17.0 11.313708 9.0 13.0 17.0 21.0 25.0 

Voir l’article suivant pour la signification de chaque statistique.

Appliquez n’importe quelle fonction ร  chaque groupe : ๐šโ€Œ๐ฉโ€Œ๐ฉโ€Œ๐ฅโ€Œ๐ฒโ€Œ()

Utilisez la mรฉthode ๐šโ€Œ๐ฉโ€Œ๐ฉโ€Œ๐ฅโ€Œ๐ฒโ€Œ() de l’objet G๐ซโ€Œ๐จโ€Œ๐ฎโ€Œ๐ฉโ€ŒB๐ฒโ€Œ pour appliquer n’importe quelle fonction ร  chaque groupe.

Chaque groupe est transmis sous forme de D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ ร  la fonction (objet appelable) spรฉcifiรฉe dans le premier argument. Notez que le D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ transmis inclut les colonnes spรฉcifiques comme clรฉs.

print(df.groupby(['c_0', 'c_1']).apply(lambda x: type(x))) # c_0 c_1 # A X <class 'pandas.core.frame.DataFrame'> # Y <class 'pandas.core.frame.DataFrame'> # B X <class 'pandas.core.frame.DataFrame'> # Y <class 'pandas.core.frame.DataFrame'> # dtype: object dfs = [] df.groupby(['c_0', 'c_1']).apply(lambda x: dfs.append(x)) print(dfs[0]) # c_0 c_1 c_2 c_3 # r_0 A X 0 125 print(dfs[1]) # c_0 c_1 c_2 c_3 # r_1 A Y 1 64 print(dfs[2]) # c_0 c_1 c_2 c_3 # r_2 B X 4 27 # r_4 B X 16 1 print(dfs[3]) # c_0 c_1 c_2 c_3 # r_3 B Y 9 16 # r_5 B Y 25 0 

La forme du rรฉsultat change en fonction du type d’objet renvoyรฉ par la fonction spรฉcifiรฉe dans ๐šโ€Œ๐ฉโ€Œ๐ฉโ€Œ๐ฅโ€Œ๐ฒโ€Œ() et des arguments de ๐ โ€Œ๐ซโ€Œ๐จโ€Œ๐ฎโ€Œ๐ฉโ€Œ๐›โ€Œ๐ฒโ€Œ() .

Certains modรจles sont prรฉsentรฉs ci-dessous. En raison de sa complexitรฉ, il n’est pas nรฉcessaire de mรฉmoriser tous les modรจles dรฉtaillรฉs. Au lieu de cela, sachez simplement qu’il existe diffรฉrents modรจles. Lorsque vous l’utilisez rรฉellement, c’est une bonne idรฉe d’expรฉrimenter avec vos entrรฉes attendues pour voir les rรฉsultats.

La spรฉcification d’une fonction qui renvoie une valeur scalaire gรฉnรจre un S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ . Cependant, avec ๐šโ€Œ๐ฌโ€Œ_๐ขโ€Œ๐งโ€Œ๐โ€Œ๐žโ€Œ๐ฑโ€Œ=F๐šโ€Œ๐ฅโ€Œ๐ฌโ€Œ๐žโ€Œ , elle renvoie un D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ .

print(df.groupby(['c_0', 'c_1']).apply(lambda x: x['c_2'].max())) # c_0 c_1 # A X 0 # Y 1 # B X 16 # Y 25 # dtype: int64 print(df.groupby(['c_0', 'c_1'], as_index=False).apply(lambda x: x['c_2'].max())) # c_0 c_1 None # 0 A X 0 # 1 A Y 1 # 2 B X 16 # 3 B Y 25 

Lorsque vous spรฉcifiez une fonction qui renvoie un S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ , un D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ est renvoyรฉ si l’index du S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ correspond au nom de la colonne d’origine, ou un S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ est renvoyรฉ s’il diffรจre.

print(dfs[0][['c_2', 'c_3']].max()) # c_2 0 # c_3 125 # dtype: int64 print(dfs[0][['c_2', 'c_3']].max(axis=1)) # r_0 125 # dtype: int64 print(df.groupby(['c_0', 'c_1']).apply(lambda x: x[['c_2', 'c_3']].max())) # c_2 c_3 # c_0 c_1  # A X 0 125 # Y 1 64 # B X 16 27 # Y 25 16 print(df.groupby(['c_0', 'c_1']).apply(lambda x: x[['c_2', 'c_3']].max(axis=1))) # c_0 c_1  # A X r_0 125 # Y r_1 64 # B X r_2 27 # r_4 16 # Y r_3 16 # r_5 25 # dtype: int64 

De plus, lorsqu’un S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ est renvoyรฉ, l’index change en fonction des arguments ๐šโ€Œ๐ฌโ€Œ_๐ขโ€Œ๐งโ€Œ๐โ€Œ๐žโ€Œ๐ฑโ€Œ et ๐ โ€Œ๐ซโ€Œ๐จโ€Œ๐ฎโ€Œ๐ฉโ€Œ_๐คโ€Œ๐žโ€Œ๐ฒโ€Œ๐ฌโ€Œ de ๐ โ€Œ๐ซโ€Œ๐จโ€Œ๐ฎโ€Œ๐ฉโ€Œ๐›โ€Œ๐ฒโ€Œ() .

print( df.groupby(['c_0', 'c_1'], as_index=False).apply( lambda x: x[['c_2', 'c_3']].max(axis=1) ) ) # 0 r_0 125 # 1 r_1 64 # 2 r_2 27 # r_4 16 # 3 r_3 16 # r_5 25 # dtype: int64 print( df.groupby(['c_0', 'c_1'], group_keys=False).apply( lambda x: x[['c_2', 'c_3']].max(axis=1) ) ) # r_0 125 # r_1 64 # r_2 27 # r_4 16 # r_3 16 # r_5 25 # dtype: int64 

La spรฉcification d’une fonction qui renvoie un D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ gรฉnรจre un D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ . L’index change en fonction des arguments ๐šโ€Œ๐ฌโ€Œ_๐ขโ€Œ๐งโ€Œ๐โ€Œ๐žโ€Œ๐ฑโ€Œ et ๐ โ€Œ๐ซโ€Œ๐จโ€Œ๐ฎโ€Œ๐ฉโ€Œ_๐คโ€Œ๐žโ€Œ๐ฒโ€Œ๐ฌโ€Œ de ๐ โ€Œ๐ซโ€Œ๐จโ€Œ๐ฎโ€Œ๐ฉโ€Œ๐›โ€Œ๐ฒโ€Œ() .

print(df.groupby(['c_0', 'c_1']).apply(lambda x: x[['c_2', 'c_3']] * 10)) # c_2 c_3 # c_0 c_1  # A X r_0 0 1250 # Y r_1 10 640 # B X r_2 40 270 # r_4 160 10 # Y r_3 90 160 # r_5 250 0 print( df.groupby(['c_0', 'c_1'], as_index=False).apply(lambda x: x[['c_2', 'c_3']] * 10) ) # c_2 c_3 # 0 r_0 0 1250 # 1 r_1 10 640 # 2 r_2 40 270 # r_4 160 10 # 3 r_3 90 160 # r_5 250 0 print( df.groupby(['c_0', 'c_1'], group_keys=False).apply(lambda x: x[['c_2', 'c_3']] * 10) ) # c_2 c_3 # r_0 0 1250 # r_1 10 640 # r_2 40 270 # r_3 90 160 # r_4 160 10 # r_5 250 0