pd.unique
इनपुट एरे, या डेटाफ़्रेम कॉलम या इंडेक्स से अद्वितीय मान लौटाता है।
इस फ़ंक्शन के इनपुट को एक-आयामी होने की आवश्यकता है, इसलिए कई कॉलमों को संयोजित करने की आवश्यकता होगी। सबसे सरल तरीका यह है कि आप अपने इच्छित कॉलमों का चयन करें और फिर एक चपटा नुमाइ सरणी में मान देखें। पूरा ऑपरेशन इस तरह दिखता है:
>>> pd.unique(df[['Col1', 'Col2']].values.ravel('K'))
array(['Bob', 'Joe', 'Bill', 'Mary', 'Steve'], dtype=object)
ध्यान दें कि ravel()
एक व्यूह विधि की तुलना में एक सरणी विधि है (यदि संभव हो तो) एक बहुआयामी सरणी का। तर्क 'K'
सरणी को समतल करने की विधि बताता है कि तत्वों को मेमोरी में संग्रहीत किया जाता है (पांडा आमतौर पर फोर्ट्रान-सन्निहित आदेश में अंतर्निहित सरणियों को संग्रहीत करता है ; पंक्तियों से पहले कॉलम)। यह विधि के डिफ़ॉल्ट 'C' क्रम का उपयोग करने की तुलना में काफी तेज हो सकता है।
एक वैकल्पिक तरीका है कि कॉलम का चयन करें और उन्हें पास करें np.unique
:
>>> np.unique(df[['Col1', 'Col2']].values)
array(['Bill', 'Bob', 'Joe', 'Mary', 'Steve'], dtype=object)
यहां उपयोग करने की आवश्यकता नहीं ravel()
है क्योंकि विधि बहुआयामी सरणियों को संभालती है। फिर भी, यह धीमी गति से होने की संभावना है pd.unique
क्योंकि यह अद्वितीय मूल्यों की पहचान करने के लिए एक हैशटेबल के बजाय एक सॉर्ट-आधारित एल्गोरिथ्म का उपयोग करता है।
बड़े DataFrames के लिए गति में अंतर महत्वपूर्ण है (विशेषकर यदि केवल कुछ विशिष्ट मूल्य हैं)
>>> df1 = pd.concat([df]*100000, ignore_index=True) # DataFrame with 500000 rows
>>> %timeit np.unique(df1[['Col1', 'Col2']].values)
1 loop, best of 3: 1.12 s per loop
>>> %timeit pd.unique(df1[['Col1', 'Col2']].values.ravel('K'))
10 loops, best of 3: 38.9 ms per loop
>>> %timeit pd.unique(df1[['Col1', 'Col2']].values.ravel()) # ravel using C order
10 loops, best of 3: 49.9 ms per loop
df1.groupby(['A','B']).size().reset_index().rename(columns={0:'count'})