2016-07-12 1 views
1

行が特定のユーザーによって行われたトランザクションを表すデータフレームがあります。複数の行が同じuser_idを持つことができることに注意してください。カラム名性別user_idのランニングを考える:他の列で条件が指定された列のカテゴリの一意の値を集計する

df.gender.value_counts() 

は周波数を返しますが、彼らはおそらく回以上指定されたユーザーをカウントすることができるので、彼らは偽です。例えば、50人の男性が実際にはそれほど少ないとは言えます。

value_counts()は、user_idごとに1回だけカウントする方法はありますか?

+0

可能性のある重複した[パンダとの一意の値をカウント](http://stackoverflow.com/questions/38309729/count-unique-values-with-pandas) – ayhan

+0

なぜだろうか一意の 'user_id'を選択せず​​、後で' gender'でグループ化しません。うまくいけば、あなたのユーザーはあまりにも頻繁に性別を変更しないでください。 – jbndlr

答えて

2

はあなたのデータフレームにパンダのgroupbyを使用したい:

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()) 

この収率は(幸運のランダム選択に応じて、しかし、チャンスは3つのキーのそれぞれがために少なくとも一度選択されている「かなり高い」です50個のサンプル):

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

これはありがとうございます。 –

0

私は最初のポストに同意するが、ちょうどGROUPBYをより簡単にするために:

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

または代わりに:の

pd.value_counts(df.groupby('user_id').first().reset_index().gender) 
関連する問題