我有一个数据框,其中的行表示某个用户完成的事务。请注意,多个行可以具有相同的user_id。如果列名称性别且 user_id 正在运行:
df.gender.value_counts()
返回频率,但它们是虚假的,因为它们可能不止一次地计算给定用户。因此,例如,它可能告诉我有50个男性,而实际上更少。
我是否有办法让value_counts()
每个user_id只计算一次?
答案 0 :(得分:2)
您希望在数据框中使用panda的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())
这会产生(取决于财富随机选择,但很可能"非常高" ,对于50个样本,至少选择三个键中的每一个):
gender
female 2
male 1
Name: id, dtype: int64
答案 1 :(得分:0)
我同意第一篇文章,但只是为了使这个组更简单:
df.groupby('user_id').first().count() will give you counts of each variable
或者:
pd.value_counts(df.groupby('user_id').first().reset_index().gender)