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