Je vais vous expliquer comment obtenir tous les éléments du groupe qui satisfont les conditions du groupe par groupe en Python.
Par exemple, si vous disposez des données suivantes et que le score le plus élevé est de 80 ou plus, vous souhaitez acquérir toutes les données de cette personne.
import pandas as pd
import numpy as np
df = pd.DataFrame({"name":["Yamada","Yamada","Yamada","Suzuki","Suzuki","Hayashi"],
"score":[60,70,80,60,70,80]})
print(df)
# name score
# 0 Yamada 60
# 1 Yamada 70
# 2 Yamada 80
# 3 Suzuki 60
# 4 Suzuki 70
# 5 Hayashi 80
(Corrigé le 19/12/05) Dans un tel cas, vous pouvez écrire sur une seule ligne en utilisant `` groupby.filter```.
new_df = df.groupby('name').filter(lambda group: group['score'].max() >= 80)
print(new_df)
# name score
# 0 Yamada 60
# 1 Yamada 70
# 2 Yamada 80
# 5 Hayashi 80
Le contenu de `` filtre () '' est des expressions lambda liées à la condition.
À propos, avant que Qiita ne m'enseigne, j'avais l'habitude d'extraire les conditions comme suit. Vous pouvez obtenir une clé qui remplit les conditions pour chaque groupe disposant de groupby, puis joindre le bloc de données d'origine à cette clé sur la gauche. Plus précisément, le code est le suivant.
group_df = df.groupby('name').max().reset_index()
key = group_df[group_df['score'] >= 80]['name']
new_df = pd.merge(key, df, on = 'name', how = 'left')
print(new_df)
# name score
# 0 Hayashi 80
# 1 Yamada 60
# 2 Yamada 70
# 3 Yamada 80
J'ai été impressionné de pouvoir écrire une série de flux de jointure externe gauche sur une ligne afin de récupérer la clé qui satisfait la condition et de restaurer les informations de score qui ont été supprimées par l'opération groupby.
Recommended Posts