Ich werde erklären, wie alle Elemente der Gruppe, die die Bedingungen erfüllen, von der Gruppe für Gruppe in Python abgerufen werden.
Wenn Sie beispielsweise die folgenden Daten haben und die höchste Punktzahl 80 oder höher ist, möchten Sie alle Daten für diese Person erfassen.
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
(Korrigiert am 19/12/05) In einem solchen Fall können Sie mit `` `groupby.filter``` in einer Zeile schreiben.
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
Der Inhalt von `filter ()` sind Lambda-Ausdrücke, die sich auf die Bedingung beziehen.
Übrigens, bevor ich von Qiita unterrichtet wurde, habe ich die Bedingungen wie folgt extrahiert. Sie können einen Schlüssel erhalten, der die Bedingungen für jede Gruppe mit groupby erfüllt, und dann den ursprünglichen Datenrahmen mit diesem Schlüssel auf der linken Seite verbinden. Insbesondere lautet der Code wie folgt.
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
Ich war beeindruckt, eine Reihe von Flüssen des linken äußeren Joins in eine Zeile schreiben zu können, um den Schlüssel zu extrahieren, der die Bedingung erfüllt, und die Score-Informationen wiederherzustellen, die durch die groupby-Operation gelöscht wurden.
Recommended Posts