df.groupby(['ID','A','B'])
.agg(lambda x: '('+', '.join(x)+')')
.filter(like='R').agg('&'.join,1)
.reset_index().rename(columns={0:'R'})
df.groupby(['ID','A','B']).agg(lambda x: '('+', '.join(x)+')')
# C R1 R2
#ID A B
#1 A1 B1 (C1, C2) (abc, def) (ghi, jkl)
#2 A2 B3 (C1, C2) (mno, pqr) (stu, vwx)
df.groupby(['ID','A','B']).agg(lambda x: '('+', '.join(x)+')').filter(like='R')
# R1 R2
#ID A B
#1 A1 B1 (abc, def) (ghi, jkl)
#2 A2 B3 (mno, pqr) (stu, vwx)
df.groupby(['ID','A','B']).agg(lambda x: '('+', '.join(x)+')').filter(like='R').agg('&'.join,1).reset_index()
# ID A B 0
#0 1 A1 B1 (abc, def)&(ghi, jkl)
#1 2 A2 B3 (mno, pqr)&(stu, vwx)
df.groupby(['ID','A','B']).agg(lambda x: '('+', '.join(x)+')').filter(like='R').agg('&'.join,1).reset_index().rename(columns={0:'R'})
# ID A B R
#0 1 A1 B1 (abc, def)&(ghi, jkl)
#1 2 A2 B3 (mno, pqr)&(stu, vwx)