Saya menggunakan panda sebagai pengganti db karena saya memiliki banyak basis data (oracle, mssql, dll) dan saya tidak dapat membuat urutan perintah menjadi setara dengan SQL.
Saya memiliki tabel yang dimuat dalam DataFrame dengan beberapa kolom:
YEARMONTH, CLIENTCODE, SIZE, .... etc etc
Dalam SQL, untuk menghitung jumlah klien yang berbeda per tahun adalah:
SELECT count(distinct CLIENTCODE) FROM table GROUP BY YEARMONTH;
Dan hasilnya akan seperti itu
201301 5000
201302 13245
Bagaimana saya bisa melakukannya di panda?
value_counts
mungkin jawaban yang Anda cari: pandas.pydata.org/pandas-docs/stable/generated/…Jawaban:
Saya percaya ini yang Anda inginkan:
Contoh:
sumber
nunique
? Cobalah sebisa mungkin saya tidak dapat menemukan jalan, karena hasil dari jawaban ini adalahSeries
, bukan aDataFrame
.Berikut adalah metode lain, lebih sederhana, katakanlah nama bingkai data Anda
daat
dan nama kolomnyaYEARMONTH
sumber
DISTINCT
persyaratan dari pertanyaan! Selain itu, itu tidak termasuk hitunganNaN
!Cukup menarik, sangat sering
len(unique())
beberapa kali (3x-15x) lebih cepat daripadanunique()
.sumber
.CLIENTCODE.apply(lambda x: len(x.unique()))
, dari siniapply
panggilan dengan lambda. Misalnyadf.groupby('YEARMONTH')['CLIENTCODE'].apply(lambda x: x.unique().shape[0])
,.len(df['column'].unique())
tidak perlu untuk fungsi lambdaTypeError: object of type 'method' has no len()
dariChen's
komentar,3novak's
bekerja untuk saya.Menggunakan
crosstab
, ini akan menghasilkan lebih banyak informasi daripadagroupby
nunique
Setelah sedikit dimodifikasi, hasilkan hasilnya
sumber
YEARMONTH
dancount
. Dapatkah saya mengatur jumlah dalam urutan menurun?Saya juga menggunakan
nunique
tetapi akan sangat membantu jika Anda harus menggunakan fungsi agregat seperti'min', 'max', 'count' or 'mean'
dll.sumber
Dengan versi panda baru, mudah diperoleh sebagai kerangka data
sumber
Di sini pendekatan untuk menghitung berbeda dari beberapa kolom. Mari kita punya beberapa data:
Sekarang, daftarkan kolom yang diminati dan gunakan grup dengan sintaks yang sedikit dimodifikasi:
Kami memperoleh:
sumber
Perbedaan kolom bersama dengan agregasi pada kolom lainnya
Untuk mendapatkan jumlah nilai yang berbeda untuk kolom apa pun (
CLIENTCODE
dalam kasus Anda), kita dapat menggunakannunique
. Kami dapat meneruskan input sebagaiagg
fungsi kamus , bersama dengan agregasi pada kolom lain:sumber