पांडा में होने वाली गणनाओं का सबसे कुशल तरीका क्या है?


131

मेरे पास एक बड़ी (लगभग 12 M पंक्तियाँ) डेटाफ्रेम 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()

बहुत अच्छी तरह से दौड़ा, इसलिए मुझे वास्तव में इस निर्माण की उम्मीद नहीं थी कि निर्माण के लिए बहुत लंबा समय लगेगा।

ps: यदि उत्तर स्पष्ट है और आप इस प्रश्न को पूछने के लिए मुझे दंडित करने की आवश्यकता महसूस करते हैं, तो कृपया उत्तर को भी शामिल करें। धन्यवाद।

जवाबों:


235

मुझे लगता है कि df['word'].value_counts()सेवा करनी चाहिए। ग्रुपबी मशीनरी को छोड़ कर, आप कुछ समय बचाएंगे। मुझे यकीन नहीं है कि क्यों countकी तुलना में बहुत धीमी होनी चाहिए max। लापता मूल्यों से बचने के लिए दोनों को कुछ समय लगता है। (साथ तुलना करें size।)

किसी भी मामले में, value_counts को विशेष रूप से आपके शब्दों की तरह ऑब्जेक्ट प्रकार को संभालने के लिए अनुकूलित किया गया है , इसलिए मुझे संदेह है कि आप इससे बहुत बेहतर करेंगे।


25
धन्यवाद। मैंने श्रृंखला में एक विशिष्ट मूल्य की गिनती में तेजी लाने के लिए भी इसे उपयोगी पाया। उदाहरण के df.word.value_counts()['myword']रूप में उपवास के बारे में दो बार है len(df[df.word == 'myword'])
काल्पनिक

पूरे DataFrame पर गिनती के बारे में क्या? यह एक कॉलम के लिए काम करता है।
वैदोत्तस I.

2
मेरे स्वयं के प्रश्न का उत्तर देने के लिए (यह पता लगाया): .stack () फ़ंक्शन
वैद्योतस I.

@ वैदोत्स इवोचका, मैं इसका इस्तेमाल करने के लिए संघर्ष कर रहा हूं। क्या आप एक उदाहरण दे सकते हैं? क्या होगा यदि 'myword' कॉलम में नहीं है? यह तब एक KeyError उठाता है।
न्यूबिलीप

2
@ नयाबेल्प, मैंने ऐसा किया: df [[i for i में column_names]]। astype ('str') 'stack' ()। value_counts () 'sum' () जो प्रत्येक चयनित कॉलम को str टाइप करने के लिए सेट करता है, जो सभी व्यक्ति को स्टैकिंग करता है। शीर्ष पर कॉलम, मूल रूप से एक कॉलम बनाते हैं और फिर उस एक कॉलम पर value_counts () और sum () करते हैं। :) ढेर बहुत उपयोगी है, यह सबसे स्पष्ट विकल्प नहीं हो सकता है, लेकिन मेरे उपयोग-मामले के लिए एक आकर्षण की तरह काम किया :)
Vaidøtas I.

19

जब आप पांडा डेटा में एक कॉलम में श्रेणीबद्ध डेटा की आवृत्ति की गणना करना चाहते हैं तो उपयोग करें: df['Column_Name'].value_counts()

- स्रोत


11

पिछले उत्तरों के लिए बस एक अतिरिक्त। आइए यह न भूलें कि वास्तविक डेटा के साथ काम करते समय अशक्त मूल्य हो सकते हैं, इसलिए यह विकल्प का उपयोग करके गिनती में उन लोगों को भी शामिल करना उपयोगी है dropna=False( डिफ़ॉल्ट हैTrue )

एक उदाहरण:

>>> df['Embarked'].value_counts(dropna=False)
S      644
C      168
Q       77
NaN      2
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.