<p>让我们假设<code>df</code>是您的数据帧,首先使用<code>itertools</code>获取名为<code>pairs</code>的单独数据帧上的对组合,如下所示:</p>
<pre><code>import itertools
pairs = df.groupby('equivalences', )['class'].unique().to_frame()
func = lambda x: list(itertools.combinations(x, 2)) if len(x) > 1 else x
pairs['combinations'] = pairs['class'].map(func)
</code></pre>
<p>然后应用嵌套的for循环输出每个<code>equivalences</code>和<code>class</code>对的结果,如下所示:</p>
<pre><code>records = []
for i in pairs.index:
for j in pairs.loc[i, 'combinations']:
if isinstance(j, tuple):
records.append(
{
'equivalences': i,
'class a': j[0],
'class b': j[1],
'ch': df.loc[(df['equivalences'] == i) & (df['class'].isin(j)), 'ch'].sum()
}
)
else:
records.append(
{
'equivalences': i,
'class a': j,
'class b': 'null',
'ch': df.loc[(df['equivalences'] == i) & (df['class'] == j), 'ch'].sum()
}
)
pd.DataFrame.from_dict(records,)
</code></pre>
<p>输出:</p>
<pre><code> equivalences class a class b ch
0 AMBIENTE WEB APLICAÇÕES EM NUVENS ALTA DISPONIBILIDADE 80
1 BANCO DE DADOS GERENCIANDO SEU BD null 40
2 ETICA CONTABIL A ÉTICA CONTÁBIL A ÉTICA CONTÁBIL COM ENFOQUE 80
3 TECNOLOGIAS WEB PÁGINAS PARA INTERNET PROGRAMAÇÃO WEB AVANÇADA 80
4 TECNOLOGIAS WEB PÁGINAS PARA INTERNET DESENVOLVENDO COM JS 80
5 TECNOLOGIAS WEB PROGRAMAÇÃO WEB AVANÇADA DESENVOLVENDO COM JS 80
6 null PROGRAMAÇÃO WEB null 40
</code></pre>
<p>另一方面,在首先应用<code>groupby</code>之前,不要忘记将<code>null</code>值转换为字符串或除<code>None</code>以外的任何值,因为<code>pandas groupby</code>还不支持分组<code>None</code>。完成后,始终可以将字符串<code>null</code>值转换为实数<code>None</code></p>