Python 在其他列上计算给定条件的列类别的唯一值

Python 在其他列上计算给定条件的列类别的唯一值,python,pandas,Python,Pandas,我有一个数据框,其中的行表示某个用户完成的事务。请注意,多行可以具有相同的用户id。给定列名gender和user\u id: df.gender.value_counts() 返回频率,但它们是虚假的,因为它们可能会对给定用户进行多次计数。例如,它可能会告诉我有50个男性个体,而他们实际上要少得多 是否有一种方法可以将value\u counts()设置为每个用户id只计数一次?您想在数据帧上使用panda的groupby: users = {'A': 'male', 'B': 'femal

我有一个数据框,其中的行表示某个用户完成的事务。请注意,多行可以具有相同的用户id。给定列名genderuser\u id

df.gender.value_counts()
返回频率,但它们是虚假的,因为它们可能会对给定用户进行多次计数。例如,它可能会告诉我有50个男性个体,而他们实际上要少得多


是否有一种方法可以将
value\u counts()
设置为每个用户id只计数一次?

您想在数据帧上使用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个样本中至少选择一次的几率“相当高”):


我同意第一篇文章,但只是为了简化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)

我想知道你为什么不选择unique
user\u id
和group by
gender
。希望你的用户不会经常改变性别。。
pd.value_counts(df.groupby('user_id').first().reset_index().gender)