python pandas:两个类别中的用户数不计算在内

时间:2018-01-24 15:02:18

标签: python pandas

我有以下格式的数据框

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

但这不是我想要的。任何帮助或线索将不胜感激。

3 个答案:

答案 0 :(得分:2)

使用groupby + sizeunstack进行轮播,然后使用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