2016-07-12 3 views
1

Ich habe einen Datenrahmen, in dem die Zeilen eine Transaktion darstellen, die von einem bestimmten Benutzer ausgeführt wird. Beachten Sie, dass mehr als eine Zeile dieselbe user_id haben kann. In Anbetracht der Spaltennamen Geschlecht und user_id Lauf:Zählen von eindeutigen Werten von Kategorien der Spalte Gegebene Bedingung für andere Spalte

df.gender.value_counts() 

die Frequenzen gibt, aber sie sind unecht, da sie möglicherweise einen bestimmten Benutzer mehr zählen kann als einmal. Zum Beispiel kann es mir sagen, dass es 50 männliche Individuen gibt, während sie tatsächlich viel weniger sind.

Gibt es eine Möglichkeit, dass ich value_counts() nur einmal pro user_id zählen kann?

+0

Mögliche Duplikat [Count eindeutige Werte mit Pandas] (http://stackoverflow.com/questions/38309729/count-unique-values-with-pandas) – ayhan

+0

Ich frage mich, warum Du wählst keine einmalige 'user_id' und gruppierst nach' gender'. Hoffentlich ändern Ihre Benutzer ihr Geschlecht nicht zu oft. – jbndlr

Antwort

2

Sie wollen groupby auf Ihrem Datenrahmen Pandas verwenden:

users = {'A': 'male', 'B': 'female', 'C': 'female'} 
ul = [{'id': k, 'gender': users[k]} for _ in range(50) for k in random.choice(users.keys())] 
df = pd.DataFrame(ul) 

print(df.groupby('gender')['id'].nunique()) 

Dies ergibt (auf Vermögen der zufälligen Auswahl abhängig, aber die Chancen sind „ziemlich hoch“, dass jeder der drei Tasten mindestens einmal gewählt für 50 Proben):

gender 
female 2 
male  1 
Name: id, dtype: int64 
+0

Das funktioniert dankeschön. –

0

ich mit dem ersten Beitrag zustimmen, aber nur die groupby einfacher zu machen:

df.groupby('user_id').first().count() will give you counts of each variable 

oder alternativ:

pd.value_counts(df.groupby('user_id').first().reset_index().gender) 
Verwandte Themen