Pertanyaan Tabel frekuensi untuk satu variabel


Satu pertanyaan panda newbie terakhir untuk hari ini: Bagaimana saya menghasilkan 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 cukup yang saya perlukan: satu variabel, dihitung berdasarkan kategori. Oh, dan itu akan bagus jika bekerja untuk tipe data yang berbeda: string, int, dll.


75
2017-08-31 00:10


asal


Jawaban:


Mungkin .value_counts()?

>>> import pandas
>>> my_series = pandas.Series([1,2,2,3,3,3, "fred", 1.8, 1.8])
>>> my_series
0       1
1       2
2       2
3       3
4       3
5       3
6    fred
7     1.8
8     1.8
>>> counts = my_series.value_counts()
>>> counts
3       3
2       2
1.8     2
fred    1
1       1
>>> len(counts)
5
>>> sum(counts)
9
>>> counts["fred"]
1
>>> dict(counts)
{1.8: 2, 2: 2, 3: 3, 1: 1, 'fred': 1}

125
2017-08-31 00:14



Anda dapat menggunakan pemahaman daftar pada dataframe untuk menghitung frekuensi kolom seperti itu

[my_series[c].value_counts() for c in list(my_series.select_dtypes(include=['O']).columns)]

Kerusakan:

my_series.select_dtypes(include=['O']) 

Pilih hanya data kategorinya

list(my_series.select_dtypes(include=['O']).columns) 

Ternyata kolom dari atas menjadi daftar

[my_series[c].value_counts() for c in list(my_series.select_dtypes(include=['O']).columns)] 

Iterates melalui daftar di atas dan menerapkan value_counts () ke masing-masing kolom


8
2018-01-28 12:28



Jawaban yang diberikan oleh @DSM sederhana dan lugas, tapi 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 akan digunakan numpy.unique dengan return_counts = True

Berikut ini contohnya:

import pandas as pd
import numpy as np

my_series = pd.Series([1,2,2,3,3,3])

print(my_series.value_counts())
3    3
2    2
1    1
dtype: int64

Perhatikan di sini bahwa barang yang dikembalikan adalah pandas.Seri

Dibandingkan, numpy.unique mengembalikan tuple dengan dua item, nilai unik dan jumlah.

vals, counts = np.unique(my_series, return_counts=True)
print(vals, counts)
[1 2 3] [1 2 3]

Anda kemudian dapat menggabungkan ini ke dalam kamus:

results = dict(zip(vals, counts))
print(results)
{1: 1, 2: 2, 3: 3}

Dan kemudian menjadi pandas.Series

print(pd.Series(results))
1    1
2    2
3    3
dtype: int64

2
2017-12-13 18:45