Saya mencari cara untuk melakukan hal yang setara dengan SQL
SELECT DISTINCT col1, col2 FROM dataframe_table
Perbandingan panda sql tidak memiliki apa-apa distinct
.
.unique()
hanya berfungsi untuk satu kolom, jadi saya kira saya dapat menggabungkan kolom, atau memasukkannya ke dalam daftar / tupel dan membandingkannya, tetapi ini sepertinya sesuatu yang harus dilakukan panda dengan cara yang lebih asli.
Apakah saya melewatkan sesuatu yang jelas, atau tidak ada cara untuk melakukan ini?
df.apply(pd.Series.unique)
tetapi ini tidak akan berfungsi jika jumlah nilai unik bervariasi di seluruh kolom sehingga Anda harus membuat dikt nama kolom sebagai kunci dan nilai unik sebagai nilainyaJawaban:
Anda dapat menggunakan
drop_duplicates
metode untuk mendapatkan baris unik di DataFrame:Anda juga dapat memberikan
subset
argumen kata kunci jika Anda hanya ingin menggunakan kolom tertentu untuk menentukan keunikan. Lihat docstring .sumber
df.drop_duplicates()
secara default bukan metode inplace, jadi kembalikan DataFrame baru (biarkandf
tidak berubah). Ini adalah perilaku yang cukup standar, tetapi mungkin masih berguna.Saya sudah mencoba solusi yang berbeda. Pertama adalah:
dan berfungsi dengan baik untuk bukan data objek Cara lain untuk melakukan ini dan untuk menghindari kesalahan (untuk tipe kolom objek) adalah dengan menerapkan drop_duplicates ()
Anda juga dapat menggunakan SQL untuk melakukan ini, tetapi itu bekerja sangat lambat dalam kasus saya:
sumber
Tidak ada
unique
metode untuk df, jika jumlah nilai unik untuk setiap kolom sama maka berikut ini akan berhasil:df.apply(pd.Series.unique)
tetapi jika tidak maka Anda akan mendapatkan kesalahan. Pendekatan lain adalah dengan menyimpan nilai dalam sebuah dict yang dikunci pada nama kolom:sumber
np.unique(df[['column1','column2']].values)
Untuk mengatasi masalah serupa, saya menggunakan
groupby
:Apakah itu sesuai akan tergantung pada apa yang ingin Anda lakukan dengan hasilnya, meskipun (dalam kasus saya, saya hanya ingin yang setara
COUNT DISTINCT
dengan yang ditunjukkan).sumber
Saya pikir penggunaan
drop duplicate
terkadang tidak akan begitu berguna tergantung dataframe.Aku menemukan ini:
Dan bekerja untukku!
https://riptutorial.com/pandas/example/26077/select-distinct-rows-across-dataframe
sumber
Anda dapat mengambil set kolom dan mengurangi set yang lebih kecil dari set yang lebih besar:
sumber