根据特定计数(或大小)按响应聚合组 Pandas

Aggregate group by response based on certain count (or size) Pandas

我希望根据 groupby 计数(或大小)后获得的某些值创建总和。我已经创建了一个模拟 DataFrame 和所需的输出波纹管。从我正在寻找的示例中应该可以不言自明。我检查了很多,但似乎没有直接的答案。

     
data = {'col1' : ['A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B', 'B', 'C', 'C','C','C','C','C','C','C','C'], 'col2' :[ 'A', 'B', 'C', 'B', 'A', 'B', 'C', 'A', 'C', 'B', 'B', 'C', 'A','B','A','A','A','B','C','C']}
data = pd.DataFrame(data)

data.groupby(['col1', 'col2'])['col2'].count()

此计数的输出是:

A     A       2
      B       2
      C       1
B     A       1
      B       3
      C       2
C     A       4
      B       2
      C       3

我想对此输出做进一步计算并得到:

A     A       2
    (B+C)     3
B   (A+C)     3
      B       3
C   (A+B)     6
      C       3

您可以创建虚拟列并 groupby 使用这些列:

out = (data
       .assign(match=data['col1']==data['col2'], count=1)
       .groupby(['col1','match'], as_index=False)
       .agg({'col2': lambda x: '+'.join(x.unique()), 'count':'sum'})
       .drop(columns='match'))

输出:

  col1 col2  count
0    A  B+C      3
1    A    A      2
2    B  C+A      3
3    B    B      3
4    C  A+B      6
5    C    C      3