![](https://softscients.com/wp-content/uploads/2020/12/1.-Permudah-olah-data-dengan-teknik-aggregasi.png)
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
- kebumen dengan kecamatan kutowinangun, kades nya ari
- 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
Apalagi mencampur antara groupby + query + pandas malah error!
a.groupby(["kota"]).query("jumlah==jumlah.max()")
‘DataFrameGroupBy’ object has no attribute ‘query’