df = pd.DataFrame({'Col1': ['Bob', 'Joe', 'Bill', 'Mary', 'Joe'],
'Col2': ['Joe', 'Steve', 'Bob', 'Bob', 'Steve'],
'Col3': np.random.random(5)})
Apa cara terbaik untuk mengembalikan nilai unik 'Col1' dan 'Col2'?
Output yang diinginkan adalah
'Bob', 'Joe', 'Bill', 'Mary', 'Steve'
df1.groupby(['A','B']).size().reset_index().rename(columns={0:'count'})
Jawaban:
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:
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
:Tidak perlu digunakan di
ravel()
sini karena metode ini menangani array multidimensi. Meski begitu, ini cenderung lebih lambat daripadapd.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):
sumber
pd.DataFrame(unique_values)
,. Tidak ada cara yang baik untuk mendapatkan kembali DataFrame secara langsung.Saya telah menyiapkan a
DataFrame
dengan beberapa string sederhana di kolomnya:Anda dapat menggabungkan kolom yang Anda minati dan memanggil
unique
fungsi:sumber
Atau:
sumber
Solusi yang diperbarui menggunakan numpy v1.13 + membutuhkan menentukan sumbu dalam np.unique jika menggunakan beberapa kolom, jika tidak array secara merata diratakan.
Perubahan ini diperkenalkan Nov 2016: https://github.com/numpy/numpy/commit/1f764dbff7c496d6636dc0430f083ada9ff4e4be
sumber
Non-
pandas
solusi: menggunakan set ().Keluaran:
sumber
bagi kita yang menyukai semua hal panda, berlaku, dan tentu saja fungsi lambda:
sumber
inilah cara lain
sumber
Outputnya adalah ['Mary', 'Joe', 'Steve', 'Bob', 'Bill']
sumber