Wenn ich so einen Tisch 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 tun, um die Anzahl der eindeutigen hID von 5 zu ermitteln. Wie mache ich das in Python mit einem Pandas-Datenrahmen? Oder vielleicht ein numpy Array? Wenn ich count(hID)
machen sollte, bekomme ich in Qlik 8. Was ist der gleiche Weg, um dies in Pandas zu tun?
Zählen Sie die Distict-Werte und 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, verwenden Sie das size
-Attribut:
df['hID'].size
8
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
Wenn ich davon ausgehe, dass Daten der Name Ihres Datenrahmens ist, können Sie Folgendes tun:
data['race'].value_counts()
dies zeigt Ihnen das bestimmte Element und die Anzahl der Vorkommen.
Oder holen Sie sich 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
Sie konnten immer eine agg
innerhalb einer groupby
ausführen. Ich habe am Ende stack
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
Sie können nunique
in Pandas verwenden:
df.hID.nunique()
# 5
sie können die eindeutige Eigenschaft verwenden, indem Sie die Funktion len verwenden
len (df ['hID']. unique ()) 5