Pandas: rumus sederhana untuk “mengelompokan berdasarkan aset”


Anda dapat menggunakan sintaks dasar berikut untuk mengeksekusi pernyataan SQL yang setara dengan “GROUP BY HAVING” di panda:

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

Contoh berikut menunjukkan cara menggunakan sintaksis ini dalam praktiknya dengan pandas DataFrame berikut:

 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

Contoh 1: Sekelompok panda yang memiliki Count

Kode berikut memperlihatkan cara mengelompokkan baris berdasarkan nilai di kolom Tim lalu memfilter hanya tim yang jumlahnya lebih dari 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

Perhatikan bahwa hanya baris dengan nilai tim “A” atau “B” yang dikembalikan karena keduanya adalah tim yang jumlahnya lebih besar dari 2.

Contoh 2: Sekelompok panda yang mempunyai rata-rata

Kode berikut menunjukkan cara mengelompokkan baris berdasarkan nilai di kolom Tim lalu memfilter hanya tim yang nilai rata-rata poinnya lebih besar dari 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

Perhatikan bahwa hanya baris dengan nilai tim “A” atau “C” yang dikembalikan karena ini adalah dua tim yang memiliki nilai poin rata-rata lebih besar dari 20.

Contoh 3: Sekelompok panda yang mempunyai jumlah

Kode berikut menunjukkan cara mengelompokkan baris berdasarkan nilai di kolom Tim lalu memfilter hanya tim yang jumlah poinnya tepat 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

Perhatikan bahwa hanya baris dengan nilai tim “C” yang dikembalikan karena ini adalah satu-satunya tim yang memiliki jumlah poin sama dengan 48.

Sumber daya tambahan

Tutorial berikut menjelaskan cara melakukan operasi umum lainnya di panda:

Pandas: dapatkan indeks baris yang kolomnya cocok dengan nilainya
Pandas: cara memilih kolom yang berisi string tertentu
Pandas: cara memeriksa apakah kolom berisi string

Tambahkan komentar

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *