在其他列

时间:2016-07-12 11:55:08

标签: python pandas

我有一个数据框,其中的行表示某个用户完成的事务。请注意,多个行可以具有相同的user_id。如果列名称性别 user_id 正在运行:

df.gender.value_counts()

返回频率,但它们是虚假的,因为它们可能不止一次地计算给定用户。因此,例如,它可能告诉我有50个男性,而实际上更少。

我是否有办法让value_counts()每个user_id只计算一次?

2 个答案:

答案 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)