所以我有一个人员列表,每个人都有2本以上的书,可能有4本。我想做一个分组并检查收到的书的组合频率例如[ID,books]比如ID:1,他有书:A,B我想知道有多少人收到了A和B的组合书。
从技术上讲,如果某人有书A、B、C;他将具有(A,B(、(A,C(、(B,C(和(A,B.C(的组合。
输入:
df = pd.DataFrame({'user': [1, 1, 2, 2, 3, 3, 3],
'disease': ['a', 'b', 'b', 'c', 'a', 'b', 'c']})[enter image description here][1]
在此处输入图像描述
您可以使用set
操作。
识别具有给定目标组合的用户:
target = {'a', 'b'}
df.groupby('user')['disease'].agg(lambda x: target.issubset(x))
输出:
user
1 True
2 False
3 True
Name: disease, dtype: bool
统计与目标匹配的用户数:
target = {'a', 'b'}
df.groupby('user')['disease'].agg(lambda x: target.issubset(x)).sum()
输出:2