Вы можете сделать это следующим образом:
aggregated=df.groupby(['col2']).agg({'col1': 'unique'})
Вывод будет выглядеть так:
col2
0 [A, B]
1 [A, B, C]
2 [B, C]
3 [A, C]
4 [C]
И если вы хотите отформатировать его, как в вашем примере, вы можете выполнить:
aggregated.reset_index().apply('{0.col2} in {0.col1}'.format, axis='columns')
Так это выглядит так:
0 0 in ['A' 'B']
1 1 in ['A' 'B' 'C']
2 2 in ['B' 'C']
3 3 in ['A' 'C']
4 4 in ['C']