パンダ: 「資産によるグループ化」のための簡単な式


次の基本構文を使用して、pandas の「GROUP BY HAVING」SQL ステートメントと同等のものを実行できます。

 df. groupby (' some_column '). filter ( lambda x: some condition)

次の例は、実際に次の pandas DataFrame でこの構文を使用する方法を示しています。

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' team ': ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C'],
                   ' position ': ['G', 'F', 'F', 'G', 'F', 'F', 'G', 'G'],
                   ' points ': [30, 22, 19, 14, 14, 11, 20, 28]})

#view DataFrame
print (df)

  team position points
0 AG 30
1 AF 22
2 FY 19
3 BG 14
4 BF 14
5 BF 11
6 GC 20
7 GC 28

例 1: Count を持つパンダのグループ

次のコードは、 「チーム」列の値に基づいて行をグループ化し、カウントが 2 より大きいチームのみをフィルターする方法を示しています。

 #group by team and filter for teams with count > 2
df. groupby (' team '). filter ( lambda x: len (x) > 2 )


        team position points
0 A G 30
1 A F 22
2 A F 19
3 B G 14
4 B F 14
5 B F 11

チーム値が「A」または「B」の行のみが返されることに注意してください。これらはどちらもチームの数が 2 より大きいためです。

例 2: 平均的なパフォーマンスを持つパンダのグループ

次のコードは、 「チーム」列の値に基づいて行をグループ化し、平均ポイント値が 20 を超えるチームのみをフィルターする方法を示しています。

 #group by team and filter for teams with mean points > 20
df. groupby (' team '). filter ( lambda x: x[' points ']. mean () > 20 )

        team position points
0 A G 30
1 A F 22
2 A F 19
6 C G 20
7 C G 28

これらは平均ポイント値が 20 を超える 2 チームであるため、チーム値が「A」または「C」の行のみが返されることに注意してください。

例 3: 合計を持つパンダのグループ

次のコードは、 「チーム」列の値で行をグループ化し、ポイント合計がちょうど 48 であるチームのみをフィルターする方法を示しています。

 #group by team and filter for teams with sum of points equal to 48
df. groupby (' team '). filter ( lambda x: x[' points ']. sum () == 48 )

        team position points
6 C G 20
7 C G 28

ポイント合計が 48 に等しい唯一のチームであるため、チーム値が「C」の行のみが返されることに注意してください。

追加リソース

次のチュートリアルでは、パンダで他の一般的な操作を実行する方法を説明します。

Pandas: 列が値と一致する行のインデックスを取得します
パンダ: 特定の文字列を含む列を選択する方法
パンダ: 列に文字列が含まれているかどうかを確認する方法

コメントを追加する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です