我有以下格式的数据框
user category
1 A
1 B
1 A
2 B
3 B
2 B
现在,我正在尝试计算每个类别和两个类别中的唯一身份用户数。所以对于上面的表我有A=1, B= 3 and A&B = 1
以下代码没有给出每个类别中的用户:
df.groupby(['category',]).count()
但这不是我想要的。任何帮助或线索将不胜感激。
答案 0 :(得分:2)
使用groupby
+ size
和unstack
进行轮播,然后使用count
,为交叉点添加dropna
并获取长度:
df1 = df.groupby(['user','category']).size().unstack()
print (df1)
category A B
user
1 2.0 1.0
2 NaN 2.0
3 NaN 1.0
print (df1.count())
A 1
B 3
dtype: int64
print (len(df1.dropna()))
或者:
print (df.notnull().all().sum())
1
如果需要所有类别的所有用户:
print (df1.dropna().index.tolist())
[1]
答案 1 :(得分:0)
这是一种方法。输出是字典格式。交叉点由元组键表示。
standard
答案 2 :(得分:0)
不使用groupby
使用crosstab
pd.crosstab(df.user,df.category)
Out[604]:
category A B
user
1 2 1
2 0 2
3 0 1
pd.crosstab(df.user,df.category).replace(0,np.nan).count()
Out[612]:
category
A 1
B 3
dtype: int64
pd.crosstab(df.user,df.category).replace(0,np.nan).count().min()
Out[613]: 1