Я думаю, вы можете создать DataFrame
по совокупности bn_note_text
для количества дублированных значений с join
всего текста вместе с другим DataFrame размером всех категорий.Последний concat
их вместе:
aggreg = [('repeat_no', lambda x: x.duplicated(keep=False).sum()),
('text', ', '.join)]
df2 = df.groupby('ed_name')['bn_note_text'].agg(aggreg)
df1 = df.groupby(['ed_name', 'Target_Classification']).size().unstack(fill_value=0)
#slowier alternative in large df
#df1 = pd.crosstab(df['ed_name'], df['Target_Classification'])
df = pd.concat([df1, df2], axis=1).reset_index()
print (df)
ed_name InsufficientInfo SufficientInfo repeat_no \
0 ABC 0 3 0
1 PQR 2 1 2
2 XYZ 2 0 0
text
0 abcd, efgh, ij, ajhd hju, xyz pqr tv
1 pqr, jji, bbb, met, met
2 done, done meeting
Другое решение с list
s:
aggreg = [('repeat_no', lambda x: x.duplicated(keep=False).sum()),
('text', lambda x: x.tolist())]
df2 = df.groupby('ed_name')['bn_note_text'].agg(aggreg)
df1 = df.groupby(['ed_name', 'Target_Classification']).size().unstack(fill_value=0)
#slowier alternative in large df
#df1 = pd.crosstab(df['ed_name'], df['Target_Classification'])
df = pd.concat([df1, df2], axis=1).reset_index()
print (df)
ed_name InsufficientInfo SufficientInfo repeat_no \
0 ABC 0 3 0
1 PQR 2 1 2
2 XYZ 2 0 0
text
0 [abcd, efgh, ij, ajhd hju, xyz pqr tv]
1 [pqr, jji, bbb, met, met]
2 [done, done meeting]