Satu pertanyaan panda pemula terakhir untuk hari ini: Bagaimana cara membuat tabel untuk satu Seri?
Sebagai contoh:
my_series = pandas.Series([1,2,2,3,3,3])
pandas.magical_frequency_function( my_series )
>> {
1 : 1,
2 : 2,
3 : 3
}
Banyak googling telah membawa saya ke Series.describe () dan pandas.crosstabs, tetapi tidak satu pun dari ini melakukan apa yang saya butuhkan: satu variabel, dihitung berdasarkan kategori. Oh, dan alangkah baiknya jika itu berfungsi untuk tipe data yang berbeda: string, int, dll.
.value_counts().sort_index(1)
, untuk mencegah kolom pertama mungkin sedikit rusakAttributeError: 'DataFrame' object has no attribute 'value_counts'
pd.value_counts(df.values.ravel())
yang mengembalikan rangkaian yang atributindex
dan nyavalues
berisi elemen unik dan jumlahnya masing-masing.Anda dapat menggunakan pemahaman daftar pada kerangka data untuk menghitung frekuensi kolom seperti itu
Kerusakan:
sumber
Jawaban yang diberikan oleh @DSM sederhana dan lugas, tetapi saya pikir saya akan menambahkan masukan saya sendiri untuk pertanyaan ini. Jika Anda melihat kode untuk pandas.value_counts , Anda akan melihat bahwa ada banyak hal yang terjadi.
Jika Anda perlu menghitung frekuensi banyak seri, ini bisa memakan waktu cukup lama. Implementasi yang lebih cepat adalah menggunakan numpy.unique dengan
return_counts = True
Berikut ini contohnya:
Perhatikan di sini bahwa item yang dikembalikan adalah pandas.Series
Dibandingkan,
numpy.unique
mengembalikan tupel dengan dua item, nilai unik dan jumlah.Anda kemudian dapat menggabungkan ini ke dalam kamus:
Dan kemudian menjadi
pandas.Series
sumber
untuk distribusi frekuensi variabel dengan nilai yang berlebihan Anda dapat menciutkan nilai di kelas,
Di sini saya nilai berlebihan untuk
employrate
variabel, dan tidak ada arti distribusi frekuensinya dengan langsungvalues_count(normalize=True)
distribusi frekuensi
values_count(normalize=True)
tanpa klasifikasi, panjang hasil di sini adalah 139 (tampaknya tidak berarti sebagai distribusi frekuensi):menempatkan klasifikasi kita meletakkan semua nilai dengan kisaran tertentu yaitu.
setelah klasifikasi kami memiliki distribusi frekuensi yang jelas. di sini kita dapat dengan mudah melihat, bahwa
37.64%
negara-negara memiliki tingkat pekerjaan antara51-60%
dan11.79%
dari negara-negara yang memiliki tingkat pekerjaan antara71-80%
sumber