Saya memiliki bingkai data df
dan saya menggunakan beberapa kolom dari itu ke groupby
:
df['col1','col2','col3','col4'].groupby(['col1','col2']).mean()
Dengan cara di atas saya hampir mendapatkan tabel (frame data) yang saya butuhkan. Yang hilang adalah kolom tambahan yang berisi jumlah baris di setiap grup. Dengan kata lain, saya memiliki maksud tetapi saya juga ingin tahu berapa banyak angka yang digunakan untuk mendapatkan cara ini. Misalnya di grup pertama ada 8 nilai dan yang kedua 10 dan seterusnya.
Singkatnya: Bagaimana cara saya mendapatkan statistik bijaksana-kelompok untuk kerangka data?
df[['col1','col2','col3','col4']].groupby(['col1','col2']).agg(['mean', 'count'])
count
kolom per grup.result = df['col1','col2','col3','col4'].groupby(['col1', 'col2']).mean() ; counts = times.groupby(['col1', 'col2']).size() ; result['count'] = counts
Jawaban cepat:
Cara paling sederhana untuk mendapatkan jumlah baris per grup adalah dengan menelepon
.size()
, yang mengembalikanSeries
:Biasanya Anda menginginkan hasil ini sebagai
DataFrame
(bukan aSeries
) sehingga Anda dapat melakukan:Jika Anda ingin mengetahui cara menghitung jumlah baris dan statistik lainnya untuk setiap grup, baca terus di bawah ini.
Contoh terperinci:
Pertimbangkan contoh kerangka data berikut:
Pertama mari kita gunakan
.size()
untuk mendapatkan jumlah baris:Kemudian mari kita gunakan
.size().reset_index(name='counts')
untuk mendapatkan jumlah baris:Termasuk hasil untuk lebih banyak statistik
Saat Anda ingin menghitung statistik pada data yang dikelompokkan, biasanya akan terlihat seperti ini:
Hasil di atas agak menjengkelkan untuk ditangani karena label kolom bersarang, dan juga karena jumlah baris berdasarkan basis kolom.
Untuk mendapatkan kontrol lebih besar atas output, saya biasanya membagi statistik menjadi agregat individu yang kemudian saya gabungkan menggunakan
join
. Ini terlihat seperti ini:Catatan kaki
Kode yang digunakan untuk menghasilkan data uji ditunjukkan di bawah ini:
Penolakan:
Jika beberapa kolom yang Anda agregasikan memiliki nilai nol, maka Anda benar-benar ingin melihat jumlah baris grup sebagai agregasi independen untuk setiap kolom. Kalau tidak, Anda dapat disesatkan mengenai berapa banyak catatan yang sebenarnya digunakan untuk menghitung hal-hal seperti mean karena panda akan menjatuhkan
NaN
entri dalam perhitungan rata-rata tanpa memberi tahu Anda tentang hal itu.sumber
In [5]: counts_df = pd.DataFrame(df.groupby('col1').size().rename('counts'))
, mungkin lebih baik untuk mengatur ukuran () sebagai kolom baru jika Anda ingin memanipulasi kerangka data untuk analisis lebih lanjut, yang seharusnyacounts_df = pd.DataFrame(df.groupby('col1').size().reset_index(name='counts')
isnull
kueri ini ke dalam satu kolom juga?'col4': ['median', 'min', 'count', 'isnull']
Satu Fungsi untuk Memerintah Mereka Semua:
GroupBy.describe
Pengembalian
count
,mean
,std
, dan statistik lainnya yang berguna per-kelompok.Untuk mendapatkan statistik tertentu, cukup pilih,
describe
berfungsi untuk beberapa kolom (ubah['C']
ke['C', 'D']
—atau hapus sama sekali — dan lihat apa yang terjadi, hasilnya adalah kerangka data kolom MultiIndexed).Anda juga mendapatkan statistik berbeda untuk data string. Ini sebuah contoh,
Untuk informasi lebih lanjut, lihat dokumentasi .
sumber
Kita dapat dengan mudah melakukannya dengan menggunakan groupby dan menghitung. Tapi, kita harus ingat untuk menggunakan reset_index ().
sumber
Untuk mendapatkan beberapa statistik, tutup indeks, dan pertahankan nama kolom:
Menghasilkan:
sumber
Buat objek grup dan panggil metode seperti contoh di bawah ini:
sumber
Silakan coba kode ini
Saya pikir kode itu akan menambahkan kolom yang disebut 'hitung' yang menghitung setiap kelompok
sumber