Chcę pogrupować Return_On_Capital według datadate i nazwy firmy

Compustat.groupby(Compustat['datadate'].dt.strftime('%Y'))['Return_On_Capital'].sum().sort_values()


   datadate    Company name     asset      Debt_Curr_Liabilities    Return_On_Capital
  31/01/2007    AAR CORP       1067.633        74.245                 -0.143515185
  31/01/2011    AAR CORP       913.985         1703.727               -0.125509652
  31/01/2011    AAR CORP       954.1           69                      0.009514327
  31/01/2007    ADC            1008.2          200.6                  -0.097757499
  30/01/2006        ADC            1107.7          1474.5                 -0.091422466
  31/01/2010    ALPHARMA       692.991         34.907                 -0.053860375
  31/01/2006    ALF           353.541          927.239                -0.131694528
1
Chukypedro 22 marzec 2020, 08:30

2 odpowiedzi

Najlepsza odpowiedź

Utwórz listę w groupby i dodaj kolumnę Company name do grupowania według year s według Series.dt.year i firmy, ale najpierw konwertuj ciągi na czasy danych przez to_datetime:

Compustat['datadate'] = pd.to_datetime(Compustat['datadate'], dayfirst=True)

df = (Compustat.groupby([Compustat['datadate'].dt.year,'Company name'])['Return_On_Capital']
               .sum()
               .sort_values()
               .reset_index())
print (df)
   datadate Company name  Return_On_Capital
0      2007     AAR CORP          -0.143515
1      2006          ALF          -0.131695
2      2011     AAR CORP          -0.115995
3      2007          ADC          -0.097757
4      2006          ADC          -0.091422
5      2010     ALPHARMA          -0.053860
1
jezrael 22 marzec 2020, 05:54

To może zadziałać -

Compustat['datadate'] = pd.to_datetime(Compustat['datadate'], format='%d/%m/%Y')
Compustat.groupby([Compustat['datedate'].dt.year, 'Company name']).agg(sum=('Return_On_Capital', 'sum')).sort_values()
1
Sajan 22 marzec 2020, 06:32