Nice programing

데이터 프레임을 그룹화하고 합계 및 개수를 얻습니까?

nicepro 2020. 12. 29. 08:27
반응형

데이터 프레임을 그룹화하고 합계 및 개수를 얻습니까?


다음과 같은 데이터 프레임이 있습니다.

              Company Name              Organisation Name  Amount
10118  Vifor Pharma UK Ltd  Welsh Assoc for Gastro & Endo 2700.00
10119  Vifor Pharma UK Ltd    Welsh IBD Specialist Group,  169.00
10120  Vifor Pharma UK Ltd             West Midlands AHSN 1200.00
10121  Vifor Pharma UK Ltd           Whittington Hospital   63.00
10122  Vifor Pharma UK Ltd                 Ysbyty Gwynedd   75.93

어떻게이 합계 않는 Amount과를 계산 Organisation Name, 새로운 dataframe을 얻기 위해 그 같은 외모?

              Company Name             Organisation Count   Amount
10118  Vifor Pharma UK Ltd                              5 11000.00

합계 또는 계산 방법을 알고 있습니다 .

df.groupby('Company Name').sum()
df.groupby('Company Name').count()

그러나 둘 다 수행하는 방법은 아닙니다!


이 시도:

In [110]: (df.groupby('Company Name')
   .....:    .agg({'Organisation Name':'count', 'Amount': 'sum'})
   .....:    .reset_index()
   .....:    .rename(columns={'Organisation Name':'Organisation Count'})
   .....: )
Out[110]:
          Company Name   Amount  Organisation Count
0  Vifor Pharma UK Ltd  4207.93                   5

또는 색인을 재설정하지 않으려면 :

df.groupby('Company Name')['Amount'].agg(['sum','count'])

또는

df.groupby('Company Name').agg({'Amount': ['sum','count']})

데모:

In [98]: df.groupby('Company Name')['Amount'].agg(['sum','count'])
Out[98]:
                         sum  count
Company Name
Vifor Pharma UK Ltd  4207.93      5

In [99]: df.groupby('Company Name').agg({'Amount': ['sum','count']})
Out[99]:
                      Amount
                         sum count
Company Name
Vifor Pharma UK Ltd  4207.93     5

열이 많고 하나만 다른 경우 다음을 수행 할 수 있습니다.

In[1]: grouper = df.groupby('Company Name')
In[2]: res = grouper.count()
In[3]: res['Amount'] = grouper.sum()['Amount']
In[4]: res
Out[4]:
                      Organisation Name   Amount
Company Name                                   
Vifor Pharma UK Ltd                  5  4207.93

그런 다음 원하는대로 조직 이름 열의 이름을 바꿀 수 있습니다.


df.groupby('Company Name').agg({'Organisation name':'count','Amount':'sum'})\
    .apply(lambda x: x.sort_values(['count','sum'], ascending=False))

참조 URL : https://stackoverflow.com/questions/38174155/group-dataframe-and-get-sum-and-count

반응형