根据特定计数(或大小)按响应聚合组 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
我希望根据 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