Pandalarda meydana gelen olayları saymanın en etkili yolu nedir?


131

Aşağıdakileri içeren büyük (yaklaşık 12 milyon satır) bir veri çerçevem ​​df var:

df.columns = ['word','documents','frequency']

Dolayısıyla aşağıdakiler zamanında gerçekleşti:

word_grouping = df[['word','frequency']].groupby('word')
MaxFrequency_perWord = word_grouping[['frequency']].max().reset_index()
MaxFrequency_perWord.columns = ['word','MaxFrequency']

Ancak, bunun çalışması beklenmedik uzun bir zaman alıyor:

Occurrences_of_Words = word_grouping[['word']].count().reset_index()

Burada neyi yanlış yapıyorum? Büyük bir veri çerçevesinde oluşumları saymanın daha iyi bir yolu var mı?

df.word.describe()

oldukça iyi çalıştı, bu yüzden bu Occurrences_of_Words veri çerçevesinin oluşturulmasının çok uzun sürmesini beklemiyordum.

ps: Cevap açıksa ve bu soruyu sorduğum için beni cezalandırma ihtiyacı hissediyorsanız, lütfen yanıtı da ekleyin. teşekkür ederim.

Yanıtlar:


237

Bence df['word'].value_counts()hizmet etmeli. Grup makinelerini atlayarak biraz zaman kazanacaksınız. Neden countdaha yavaş olması gerektiğinden emin değilim max. Eksik değerleri önlemek için her ikisi de biraz zaman alır. (İle karşılaştırmaksize .)

Her durumda, value_counts, sözcükleriniz gibi nesne türünü işlemek için özel olarak optimize edilmiştir, bu yüzden bundan çok daha iyisini yapacağınızdan şüpheliyim.


25
Teşekkürler. Bunu, bir serideki belirli bir değeri saymayı hızlandırmak için de yararlı buldum. örneğin df.word.value_counts()['myword'], yaklaşık iki kat daha hızlıdır len(df[df.word == 'myword']).
fantabolous

DataFrame'in tamamı boyunca saymaya ne dersiniz? Bu tek sütun için çalışır.
Vaidøtas I.

2
Kendi sorumu yanıtlamak için (anladım): .stack () işlevi
Vaidøtas I.

@ Vaidøtas Ivøška, nasıl kullanılacağı konusunda mücadele ediyorum. Bir örnek verebilir misiniz? Ya 'kelimem' sütunda değilse? Daha sonra bir KeyError oluşturur.
Newbielp

2
@Newbielp, bunu yaptım: df [[i sütun_namesinde i için]]. Astype ('str'). Stack (). Value_counts (). Sum (), seçilen her sütunu str türüne ayarlamaya eşittir, tüm bireyselleri yığınlar üstteki sütunlar, temelde bir sütun oluşturur ve ardından o sütunda value_counts () ve sum () işlemlerini yapar. :) Stack oldukça kullanışlıdır, en bariz seçim olmayabilir, ancak kullanım durumum için bir cazibe gibi çalıştı :)
Vaidøtas I.

19

Pandas dataFrame içindeki bir sütundaki kategorik verilerin sıklığını saymak istediğinizde: df['Column_Name'].value_counts()

- Kaynak .


11

Önceki cevaplara sadece bir ek. Unutmayalım ki, gerçek verilerle uğraşırken boş değerler olabilir, bu nedenle seçeneği kullanarak bunları saymaya dahil etmenin de faydası vardır dropna=False( varsayılanTrue )

Bir örnek:

>>> df['Embarked'].value_counts(dropna=False)
S      644
C      168
Q       77
NaN      2
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.