який найефективніший спосіб підрахунку випадків у пандах?


131

У мене є великий (близько 12 М рядків) кадр даних df з кажуть:

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

Отже, наступні пробігли своєчасно:

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

Однак для запуску цього потрібно несподівано багато часу:

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

Що я тут роблю неправильно? Чи є кращий спосіб підрахунку випадків у великому кадрі даних?

df.word.describe()

працює досить добре, тому я дійсно не очікував, що цей фреймворк даних Occurrences_of_Words буде тривати дуже довго.

ps: Якщо відповідь очевидна і ви відчуваєте потребу стягнути мене за те, щоб задати це питання, будь ласка, включіть відповідь. спасибі.

Відповіді:


235

Я думаю, що df['word'].value_counts()повинен служити. Пропустивши групову техніку, ви заощадите деякий час. Я не впевнений, чому countслід набагато повільніше, ніж max. Для обох потрібен певний час, щоб уникнути пропущених значень. (Порівняйте з size.)

У будь-якому випадку, value_counts був спеціально оптимізований для обробки типу об’єкта, як ваші слова, тому я сумніваюся, що ви зробите набагато краще, ніж це.


25
Дякую. Я також вважав це корисним для прискорення підрахунку конкретного значення в серії. наприклад df.word.value_counts()['myword'], приблизно вдвічі швидше len(df[df.word == 'myword']).
фантастичне

А як щодо підрахунку всієї DataFrame? Це працює для одного стовпця.
Vaidøtas I.

2
Щоб відповісти на моє власне запитання (зрозумів це): .stack () функція
Vaidøtas I.

@ Vaidøtas Ivøška, я боровся, як це використати. Чи можете ви навести приклад? Що робити, якщо "myword" немає у стовпці? Потім він піднімає KeyError.
Newbielp

2
@Newbielp, я зробив це: df [[i for i in column_names]]. Astype ('str'). Stack (). Value_counts (). Sum (), який прирівнюється до встановлення кожного вибраного стовпця на тип str, укладаючи всі індивідуальні стовпців зверху, утворюючи в основному один стовпець, а потім виконуючи значення_врахування () та суму () на цьому одному стовпці. :) Стек є досить корисним, це може бути не найбільш очевидним вибором, але він працював як шарм для мого використання :)
Vaidøtas I.

19

Коли ви хочете порахувати частоту категоричних даних у стовпчику в даних pandasFrame: df['Column_Name'].value_counts()

- Джерело .


11

Просто доповнення до попередніх відповідей. Не забуваймо, що при роботі з реальними даними можуть бути нульові значення, тому корисно також включити їх у підрахунок, скориставшись опцією dropna=False( за замовчуванням єTrue )

Приклад:

>>> df['Embarked'].value_counts(dropna=False)
S      644
C      168
Q       77
NaN      2
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.