pd.unique
ইনপুট অ্যারে, বা ডেটা ফ্রেম কলাম বা সূচক থেকে অনন্য মানগুলি প্রদান করে।
এই ফাংশনটির ইনপুটটি এক-মাত্রিক হওয়া দরকার, তাই একাধিক কলামগুলি একত্রিত করা দরকার। সবচেয়ে সহজ উপায় হ'ল আপনি যে কলামগুলি চান তা নির্বাচন করুন এবং তারপরে একটি সমতল NumPy অ্যারেতে মানগুলি দেখুন। পুরো অপারেশনটি এরকম দেখাচ্ছে:
>>> pd.unique(df[['Col1', 'Col2']].values.ravel('K'))
array(['Bob', 'Joe', 'Bill', 'Mary', 'Steve'], dtype=object)
নোট যে ravel()
একটি বহুমাত্রিক অ্যারের ভিউ (সম্ভব হলে) প্রদানের চেয়ে অ্যারে পদ্ধতি। যুক্তিটি 'K'
পদ্ধতিগুলিকে অ্যারে সমতল করার পদ্ধতিটিকে ক্রমে উপাদানগুলিকে মেমোরিতে সংরক্ষণ করার পদ্ধতি বলে (প্যান্ডাস সাধারণত ফোরট্রান-সামঞ্জস্যপূর্ণ ক্রমে অন্তর্নিহিত অ্যারে সঞ্চয় করে ; সারিগুলির আগে কলামগুলি)। পদ্ধতির ডিফল্ট 'সি' অর্ডার ব্যবহার করার চেয়ে এটি উল্লেখযোগ্যভাবে দ্রুত হতে পারে।
বিকল্প উপায় হ'ল কলামগুলি নির্বাচন করা এবং এগুলিতে প্রেরণ করা np.unique
:
>>> np.unique(df[['Col1', 'Col2']].values)
array(['Bill', 'Bob', 'Joe', 'Mary', 'Steve'], dtype=object)
ravel()
পদ্ধতিটি বহুমাত্রিক অ্যারে পরিচালনা করে বলে এখানে ব্যবহার করার দরকার নেই । তবুও, pd.unique
এটি অনন্য মানেরগুলি চিহ্নিত করার জন্য হ্যাশটেবলের পরিবর্তে বাছাই-ভিত্তিক অ্যালগরিদম ব্যবহার করার কারণে এটি ধীর হতে পারে ।
গতির পার্থক্য বৃহত্তর ডেটাফ্রেমগুলির জন্য তাৎপর্যপূর্ণ (বিশেষত যদি কেবলমাত্র কয়েকটি মুখ্য অনন্য মূল্য থাকে):
>>> 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'})