Как группировать столбец с количеством вхождений в другом столбце и подсчитывать частоту предложений в Pandas - PullRequest
0 голосов
/ 06 июня 2018

У меня есть данные ниже.Мне нужно сгруппировать по количеству вхождений в другом столбце и отделить его.

  • Сначала мне нужно сгруппировать по «имени сотрудника»
  • И для этого конкретного сотрудника, мне нужно посчитать и разделить, сколько «Целевых классификаций»
  • Затем мне нужно увидеть частоту «заметок» для этого конкретного empolyee

    Ввод:

    ed_name    ed_employee_role    bn_note_text     word_count   Target_Classification
    ABC        RM                  abcd, efgh, ij   12           SufficientInfo
    XYZ        BM                  done             14           InsufficientInfo
    PQR        SM                  pqr, jji, bbb    10           SufficientInfo
    ABC        RM                  ajhd hju         9            SufficientInfo
    ABC        RM                  xyz pqr tv       16           SufficientInfo
    XYZ        BM                  done meeting     9            InsufficientInfo
    PQR        SM                  met              5            InsufficientInfo
    PQR        SM                  met              5            InsufficientInfo
    

    Требуемый выход:

    emp name : PQR  
    notes :
    pqr, jji, bbb   
    met     
    met     
    
    Count of Insuffient Info :          2
    Count of Suffiient info  :          1
    Frequency of repeating sentence :   2
    

    emp name : ABC  
    Notes:
    abcd, efgh, ij  
    ajhd hju    
    xyz pqr tv  
    
    Count of Insuffient Info :          0
    Count of Suffiient info             3
    Frequency of repeating sentence     0
    

    emp name : XYZ  
    Notes:
    done    
    done meeting    
    
    Count of Insuffient Info :          2
    Count of Suffiient info             0
    Frequency of repeating sentence     0
    

1 Ответ

0 голосов
/ 06 июня 2018

Я думаю, вы можете создать 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]  
...