我在为数据生成一些简单的汇总统计信息时遇到麻烦(大脑障碍)。
我想做的是计算所有“ id”中同时出现的“ code”值的数量。数据如下:
id code
1 A
2 A
2 B
3 A
3 B
4 A
5 A
5 C
6 A
6 B
6 C
所以输出看起来像这张表。或者,可能通过在原始数据“ combo-id”上为每个唯一组合添加一个分解列。
Combo Count combo-id
(A) 2 1
(A,B) 2 2
(A,C) 1 3
(A,B,C) 1 4
答案 0 :(得分:2)
首先按组创建tuple
,然后按GroupBy.size
进行计数:
s = df.groupby('id')['code'].apply(tuple).rename('Combo')
#if duplicates don't matter, thank you @cripcate
#s = df.groupby('id')['code'].apply(set).rename('Combo')
df1 = s.groupby(s).size().reset_index(name='Count')
print (df1)
Combo Count
0 (A,) 2
1 (A, B) 2
2 (A, B, C) 1
3 (A, C) 1
答案 1 :(得分:-2)
尝试添加.unique()
Series.unique()[源代码]
Return unique values of Series object. Uniques are returned in order of appearance. Hash table-based unique, therefore does NOT sort.