return all column in groupby in pandas?

By | September 20, 2022
Print Friendly, PDF & Email
392 Views

return all column in groupby in pandas? hal yang berbeda antara operasi aggregasi di Pandas dan dplyr cukup jauh. Untuk urusan pivoting data frame maka dplyr di R/RStudio jauh lebih unggul dan simple karena ada operasi piping hal yang mana akan sangat sulit di pandas Python.

Apalagi menjadi operasi groupby dan query jadi satu kesatuan di pandas akan error karena operasi tersebut groupby hanya bisa digabungkan dengan operasi agg saja. Return all column in groupby in pandas yang saya maksud yaitu menggrouping data berdasarkan nilai maksimalnya dengan hasil kolom yang lainnya tetap.

Kita coba saja dengan dplyr nya R/RStudio dengan datasetnya berikut

     kota jumlah    kecamatan kades
1 kebumen    100       panjer  budi
2 kebumen    140 kutowinangun   ari
3  klaten     10      jogolan  toni
4  klaten     19      delangu  zuma

Jika hanya memilih dengan syarat kota dengan jumlah paling banyak maka operasi di R cukup mudah

library(dplyr)


kota = c("kebumen","kebumen","klaten","klaten")
jumlah = c(100,140,10,19)
kecamatan = c("panjer","kutowinangun","jogolan","delangu")
kades = c("budi","ari","toni","zuma")

a = data.frame(kota,jumlah,kecamatan,kades)

hasil = a%>%group_by(kota)%>%filter(jumlah==max(jumlah))

hasilnya yaitu

  kota    jumlah kecamatan    kades
  <chr>    <dbl> <chr>        <chr>
1 kebumen    140 kutowinangun ari  
2 klaten      19 delangu      zuma

ada 2 kota yang punya jumlah tinggi berada di kecamatan sebagai berikut

  1. kebumen dengan kecamatan kutowinangun, kades nya ari
  2. klaten dengan kecamatan delangu dengan kades nya zuma

akan tetapi bila menggunakan pandas Python akan sangat sulit sekali

import pandas as pd
a = list()
a.append({"kota":"kebumen","jumlah":100,"kecamatan":"panjer","kades":"budi"})
a.append({"kota":"kebumen","jumlah":140,"kecamatan":"kutowinganun","kades":"ari"})
a.append({"kota":"klaten","jumlah":10,"kecamatan":"jogonalan","kades":"toni"})
a.append({"kota":"klaten","jumlah":19,"kecamatan":"delangu","kades":"zuma"})

a = pd.DataFrame(a)


hasil = a.groupby(["kota","kecamatan","jumlah"]).agg({"jumlah":"max"})
hasil

hasilnya

                             jumlah
kota    kecamatan    jumlah        
kebumen kutowinganun 140        140
        panjer       100        100
klaten  delangu      19          19
        jogonalan    10          10

harus dilakukan modifikasi berikut

hasil = pd.DataFrame()
for kota in a["kota"].unique():
    buff = a.query("kota=='"+kota+"'").sort_values("jumlah",ascending=False).iloc[[0]] #ambil yang pertama
    hasil = hasil.append(buff)
hasil

hasilnya

      kota  jumlah     kecamatan kades
1  kebumen     140  kutowinganun   ari
3   klaten      19       delangu  zuma

sudah dicari cara paling efektif, tapi tidak menjawab pertanyaan nya https://stackoverflow.com/questions/71163720/how-to-return-all-column-in-groupby-in-pandas

See also  Membuat Lag time series di Pandas

Apalagi mencampur antara groupby + query + pandas malah error!

a.groupby(["kota"]).query("jumlah==jumlah.max()")

 

‘DataFrameGroupBy’ object has no attribute ‘query’

 

 

 

 

Leave a Reply