Qlik'teki gibi pandas veri çerçevesindeki bir sütundaki benzersiz değerleri saymak?


100

Böyle bir masam varsa:

df = pd.DataFrame({
         'hID': [101, 102, 103, 101, 102, 104, 105, 101],
         'dID': [10, 11, 12, 10, 11, 10, 12, 10],
         'uID': ['James', 'Henry', 'Abe', 'James', 'Henry', 'Brian', 'Claude', 'James'],
         'mID': ['A', 'B', 'A', 'B', 'A', 'A', 'A', 'C']
})

Yapabileceğim count(distinct hID)tek HID için 5 sayımı ile gelip Qlik içinde. Bunu bir pandas veri çerçevesi kullanarak python'da nasıl yaparım? Ya da belki uyuşmuş bir dizi? Benzer şekilde, yaparsam count(hID)Qlik'te 8 alırım. Bunu pandalarda yapmanın eşdeğer yolu nedir?


@piRSquared teşekkürler. Df [['dID', 'hID']]. Agg (['count', 'size', 'nunique']) gibi bir şey yapabilirim ve işe yarıyor. Ancak groupby ile birleştirildiğinde çalışmaz. Yani df [['dID', 'hID']]. Groupby ('mID'). Agg (['count', 'size', 'nunique']) KeyError diyor. belirli sütunları seçmenin ve bir koşul uygulamanın bir yolu var mı?
Alhpa Delta

Üç yol df[['mID', 'dID','hID']].groupby('mID').agg(['count', 'size', 'nunique'])
piRSquared

Veyadf[['dID','hID']].groupby(df['mID']).agg(['count', 'size', 'nunique'])
piRSquared

1
Veyadf.groupby('mID')[['dID', 'hID']].agg(['count', 'size', 'nunique'])
piRSquared

Yanıtlar:


183

Farklı değerleri sayın, şunu kullanın nunique:

df['hID'].nunique()
5

Yalnızca boş olmayan değerleri sayın, şunu kullanın count:

df['hID'].count()
8

Boş değerler dahil toplam değerleri sayın, şu sizeözelliği kullanın :

df['hID'].size
8

Koşul eklemek için düzenleyin

Boole dizini oluşturmayı kullanın:

df.loc[df['mID']=='A','hID'].agg(['nunique','count','size'])

VEYA şunu kullanarak query:

df.query('mID == "A"')['hID'].agg(['nunique','count','size'])

Çıktı:

nunique    5
count      5
size       5
Name: hID, dtype: int64

Teşekkürler! Nasıl koşul ekleriz? MID = 'A' için nunique gibi mi?
Alhpa Delta

66

Verinin veri çerçevenizin adı olduğunu varsayarsam, şunları yapabilirsiniz:

data['race'].value_counts()

bu size farklı öğeyi ve bunların oluşum sayısını gösterecektir.


Her benzersiz ürün için oranlar istiyorsanız da yapabilirsiniz. data['race'].value_counts(normalize=True)
sahte

24

Veya her sütun için benzersiz değerlerin sayısını alın:

df.nunique()

dID    3
hID    5
mID    3
uID    5
dtype: int64

Yeni pandas 0.20.0 pd.DataFrame.agg

df.agg(['count', 'size', 'nunique'])

         dID  hID  mID  uID
count      8    8    8    8
size       8    8    8    8
nunique    3    5    3    5

Her zaman bir aggiçinde bir yapabildiniz groupby. stackSunumu daha çok sevdiğim için sonunda kullandım .

df.groupby('mID').agg(['count', 'size', 'nunique']).stack()


             dID  hID  uID
mID                       
A   count      5    5    5
    size       5    5    5
    nunique    3    5    5
B   count      2    2    2
    size       2    2    2
    nunique    2    2    2
C   count      1    1    1
    size       1    1    1
    nunique    1    1    1

Teşekkürler! Nasıl koşul ekleriz? MID = 'A' için nunique gibi mi?
Alhpa Delta

@AlhpaDelta Sonunda bir şey ekledim. Umarım yardımcı olur
piRSquared


0

Sütundaki benzersiz değerleri saymak için, örneğin veri hIDçerçevesi için şunu dfkullanın:

len(df.hID.unique())

-3

len işlevini kullanarak benzersiz özelliği kullanabilirsiniz

len (df ['hID']. benzersiz ()) 5

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.