Pandas - value_counts

value_counts() Metodu

pandas.DataFrame.value_counts

DataFrame.value_counts( *subset=None*, 
                        *normalize=False*, 
                        *sort=True*, 
                        *ascending=False*, 
                        *dropna=True*)

Veri çerçevemizde sütun bazında verinin kaç kez tekrar ettiğini (kaç adet bulunduğunu) öğrenmek için value_counts() fonksiyonunu kullanbiliriz. value_counts metodu, veri frekansını (sıklığını) içeren bir Seri döndürün. Excel ve Libre Ofis Calc uygulamalarındaki Yinelenenleri Kaldır (Remove Duplicates) komutuna benzer bir işlev ile sütundaki benzersiz tüm değerleri içeren bir seri oluşturur ve bu serideki değerlerin veri çerçevesinde sütun temelli olarak kaçar adet bulunduğunu (frekansını) hesaplar / döndürür.

Parametreler

subset : Etiket veya etiket listesi. İsteğe bağlıdır, yani belirtmek şart değil.

Benzersiz kombinasyonları sayarken kullanılacak sütunları tanımlar.

normalize : Bool değer alır, varsayılan değer: False

True (Doğru) olarak ayarlandığında, Frekans değeri yerine oranları döndürür.

sort : Bool değer alır, varsayılan değer: True

True (Doğru) olarak ayarlandığında sonuç frekanslara göre sıralanır. False olduğunda DataFrame sütun değerlerine göre sıralayın.

ascending : Bool değer alır, varsayılan değer: False

True (Doğru) olarak ayarlandığında, Artan düzende yani küçükten büyüğe doğru sıralama yapar, sıralamayı ters çevirir.

dropna : Bool değer alır, varsayılan değer: True

True (Doğru) olarak ayarlandığında, NA yani boş değerleri içeren satır sayılarını dahil etmeyin anlamına gelir.

value_counts() Metodu Pandas'a, 1.3.0 sürümüne eklendi.

Not

Döndürülen Seri, giriş sütunu başına bir düzeyi olan, ancak tek bir etiket için bir Dizini (çoklu olmayan) olan bir multiındex'e sahip olacaktır. Varsayılan olarak, herhangi bir NA değeri içeren satırlar sonuçtan çıkarılır. Varsayılan olarak, ortaya çıkan Seri azalan sırada olacaktır, böylece ilk öğe en sık görülen satır olur.

Örnekler

Basit bir Veri Çerçevesi oluşturalım ve içeriğini görüntüleyelim.

>>> df = pd.DataFrame({'num_legs': [2, 4, 4, 6],
...                    'num_wings': [2, 0, 0, 0]},
...                   index=['falcon', 'dog', 'cat', 'ant'])
>>> df
        num_legs  num_wings
falcon         2          2
dog            4          0
cat            4          0
ant            6          0

value_counts() metodunu ve parametrelerini yukarıda oluşturduğumuz veri çerçevesi üzerinden aşağıdaki örneklerle detaylı olarak inceleyelim.

value_counts() Metodu

Şimdi value_counts() metodunu parametresiz bir şekilde kullanarak her bir sütundaki verilerin frekansını görelim.

>>> df.value_counts()
num_legs  num_wings
4         0            2
2         2            1
6         0            1
Name: count, dtype: int64

Çıktıyı incelediğimizde görüyoruz ki, her iki sütundaki değerlerin frekansı gösterilirken tam olarak istediğimiz sonucu elde edemiyoruz. num_wings sütununda 0 değeri 3 kez geçmesine rağmen bu değeri 2 ve 1 şeklinde görüntüleniyor. Bunun sebebinin, ilk sütun olan num_legs sütununda 3 farklı değer olması olmalı diye düşünüyorum.

subset Parametresi

subset parametresine "num_wings" değeri atansa (subset="num_wings") ve sadece num_wings sütunundaki değerlerin frekansı hesaplansa aşağıdaki çıktıyı alırız. Sonuç (çıktı) tam istediğimiz gibi. num_wings sütununda 0 değerinden 3 tane 2 değerinden 1 tane bulunduğunu görüyoruz.

>>> df.value_counts(subset="num_wings")
num_wings
0    3
2    1
Name: count, dtype: int64

İkiden fazla sütuna sahip veri çerçevemiz olsaydı ve bu veri çerçevesinde birden fazla sütunu seçerek subset parametresini kullanmak isteseydik o zaman, sütun isimlerini liste içersinde belirtmemiz gerekirdi.

Örneğin veri çerçevesine geçici olarak ağırlık (weight) bilgisi ekleyelim ve inceleyelim;

>>> df["weight"] = [1500, 5000, 1500, 5 ]
        num_legs  num_wings  weight
falcon         2          2    1500
dog            4          0    5000
cat            4          0    1500
ant            6          0       5

Şimdi tüm sütunlar yerine sadece num_legs ve weight sütunlarını seçerek (subset parametremize liste şeklinde veri girerek) value_counts metodumuzu çalıştıralım.

>>> df.value_counts(subset=["num_legs", "weight"])
num_legs  weight
2         1500      1
4         1500      1
          5000      1
6         5         1
Name: count, dtype: int64

NOT: subset parametresi kullanılmadan sadece sütun isimleri yazılarak ta aynı sonucu elde edebiliriz.

Tek sütun ismi yazılarak elde edilen sonuç;

print>>> df.value_counts("weight")
weight
1500    2
5       1
5000    1
Name: count, dtype: int64

İki sütun ismi liste içerisine yazılarak elde edilen sonuç;

>>> df.value_counts(["num_legs", "weight"])
num_legs  weight
2         1500      1
4         1500      1
          5000      1
6         5         1
Name: count, dtype: int64

sort Parametresi

sort() parametresi, False olarak ayarlandığında sonuç, frekanslara göre değil Veri Çerçevesinin sütun değerlerine göre sıralanır. Çok sütunlu veri çerçevesinde bu parametre kullanıldığında ilk sütun değerlerine göre sıralama yapılır.

>>> df.value_counts(sort=False)
num_legs  num_wings
2         2            1
4         0            2
6         0            1
Name: count, dtype: int64

ascending Metodu

ascending parametresine True değeri atayarak, sonucun (çıktının) küçükten büyüğe doğru sıralanmasını sağlayabiliriz.

>>> df.value_counts(ascending=True)
num_legs  num_wings
2         2            1
6         0            1
4         0            2
Name: count, dtype: int64

normalize parametresi

normalize parametresini True olarak değiştirerek, sütundaki değerlerin oranını belirlemeye çalışalım.

>>> df.value_counts(normalize=True)
num_legs  num_wings
4         0            0.50
2         2            0.25
6         0            0.25
Name: proportion, dtype: float64

Yine num_wings sütununu ayrı olarak inceleyecek olursak, bu sütuna ait oransal sonucu daha doğru olarak görüntülemiş olacağız.

>>> df.value_counts(subset="num_wings", normalize=True)
num_wings
0    0.75
2    0.25
Name: proportion, dtype: float64

Gördüğünüz gibi num_wings sütununda 0 değerinin bulunma (sıklık) oranı 0.75 (%75), 2 değerinin sıklık oranı 0.25 (%25)'tir.

dropna Parametresi

dropna parametresini incelemek için, içerisinde NA değerleri bulunan yeni bir veri çerçevesi oluşturuyoruz. Veri çerçevesi aşağıda görülmektedir.

>>> df = pd.DataFrame({'first_name': ['John', 'Anne', 'John', 'Beth'],
...                    'middle_name': ['Smith', pd.NA, pd.NA, 'Louise']})
>>> df
  first_name middle_name
0       John       Smith
1       Anne        <NA>
2       John        <NA>
3       Beth      Louise

value_counts() metodunu çalıştırdığımızda alacağımız çıktı aşağıdaki gibidir. NA değerleri görmezden gelinmiştir.

>>> df.value_counts()
first_name  middle_name
Beth        Louise         1
John        Smith          1
Name: count, dtype: int64

Dropna parametresini False olarak ayarlayarak, NA değerlerine sahip satırların da sayılmasını sağlayabiliriz.

>>> df.value_counts(dropna=False)
first_name  middle_name
Anne        NaN            1
Beth        Louise         1
John        Smith          1
            NaN            1
Name: count, dtype: int64
>>> df.value_counts("first_name")
first_name
John    2
Anne    1
Beth    1
Name: count, dtype: int64

Kaynak

pandas.DataFrame.value_counts — pandas 2.3.0 documentation