pd.unique
mengembalikan nilai unik dari array input, atau kolom atau indeks DataFrame.
Input untuk fungsi ini harus satu dimensi, sehingga beberapa kolom perlu digabungkan. Cara paling sederhana adalah dengan memilih kolom yang Anda inginkan dan kemudian melihat nilai-nilai dalam array NumPy rata. Seluruh operasi terlihat seperti ini:
>>> pd.unique(df[['Col1', 'Col2']].values.ravel('K'))
array(['Bob', 'Joe', 'Bill', 'Mary', 'Steve'], dtype=object)
Perhatikan bahwa ravel()
ini adalah metode array daripada mengembalikan tampilan (jika mungkin) dari array multidimensi. Argumen 'K'
memberitahu metode untuk meratakan array dalam urutan elemen disimpan dalam memori (panda biasanya menyimpan array yang mendasari dalam urutan Fortran-berdekatan ; kolom sebelum baris). Ini bisa lebih cepat secara signifikan daripada menggunakan urutan 'C' default metode.
Cara alternatif adalah memilih kolom dan meneruskannya ke np.unique
:
>>> np.unique(df[['Col1', 'Col2']].values)
array(['Bill', 'Bob', 'Joe', 'Mary', 'Steve'], dtype=object)
Tidak perlu digunakan di ravel()
sini karena metode ini menangani array multidimensi. Meski begitu, ini cenderung lebih lambat daripada pd.unique
karena menggunakan algoritma berbasis semacam daripada hashtable untuk mengidentifikasi nilai-nilai unik.
Perbedaan kecepatan sangat penting untuk DataFrames yang lebih besar (terutama jika hanya ada beberapa nilai unik):
>>> 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'})