Zählen eindeutiger Werte in einer Spalte im Pandas-Datenrahmen wie in Qlik?

99

Wenn ich einen Tisch wie diesen habe:

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']
})

Ich kann count(distinct hID)in Qlik eine Anzahl von 5 für ein einzigartiges HID finden. Wie mache ich das in Python mit einem Pandas-Datenrahmen? Oder vielleicht ein numpy Array? In ähnlicher Weise count(hID)bekomme ich 8 in Qlik , wenn ich das tun würde. Was ist der äquivalente Weg, um es bei Pandas zu tun?

Alhpa Delta
quelle
@piRSquared danke. Ich könnte so etwas wie df [['dID', 'hID']]. Agg (['count', 'size', 'nunique']) machen und es funktioniert. In Kombination mit groupby funktioniert es jedoch nicht. Also sagt df [['dID', 'hID']]. Groupby ('mID'). Agg (['count', 'size', 'nunique']) KeyError. Gibt es eine Möglichkeit, bestimmte Spalten auszuwählen und eine Bedingung anzuwenden?
Alhpa Delta
Drei Wege df[['mID', 'dID','hID']].groupby('mID').agg(['count', 'size', 'nunique'])
piRSquared
Oderdf[['dID','hID']].groupby(df['mID']).agg(['count', 'size', 'nunique'])
piRSquared
1
Oderdf.groupby('mID')[['dID', 'hID']].agg(['count', 'size', 'nunique'])
piRSquared

Antworten:

179

Zählen Sie verschiedene Werte, verwenden Sie nunique:

df['hID'].nunique()
5

Zählen Sie nur Nicht-Null-Werte. Verwenden Sie count:

df['hID'].count()
8

Zählen Sie die Gesamtwerte einschließlich der Nullwerte und verwenden Sie das sizeAttribut:

df['hID'].size
8

Bearbeiten, um Bedingung hinzuzufügen

Verwenden Sie die boolesche Indizierung:

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

ODER mit query:

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

Ausgabe:

nunique    5
count      5
size       5
Name: hID, dtype: int64
Scott Boston
quelle
Vielen Dank! Wie fügen wir eine Bedingung hinzu? Wie nunique für mID = 'A'?
Alhpa Delta
66

Wenn ich davon ausgehe, dass Daten der Name Ihres Datenrahmens sind, können Sie Folgendes tun:

data['race'].value_counts()

Dies zeigt Ihnen das jeweilige Element und dessen Häufigkeit.

oumar
quelle
Wenn Sie die Proportionen für jeden einzelnen Artikel möchten, können Sie dies auch tun. data['race'].value_counts(normalize=True)
Schein
24

Oder erhalten Sie die Anzahl der eindeutigen Werte für jede Spalte:

df.nunique()

dID    3
hID    5
mID    3
uID    5
dtype: int64

Neu in 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

Du warst immer in der Lage, ein agginnerhalb eines zu tun groupby. Ich habe stackam Ende verwendet, weil mir die Präsentation besser gefällt.

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
piRSquared
quelle
Vielen Dank! Wie fügen wir eine Bedingung hinzu? Wie nunique für mID = 'A'?
Alhpa Delta
@AlhpaDelta Ich habe am Ende etwas hinzugefügt. Hoffe das hilft
piRSquared
2

Sie können nuniquein Pandas verwenden:

df.hID.nunique()
# 5
Psidom
quelle
0

hIDVerwenden Sie zum Zählen eindeutiger Werte in der Spalte, z. B. des Datenrahmens df, Folgendes :

len(df.hID.unique())
Uma Raj
quelle
-3

Sie können eine eindeutige Eigenschaft verwenden, indem Sie die len-Funktion verwenden

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

Manu Siddhartha
quelle