본문 바로가기
파이썬

파이썬 팬더는 groupby의 평균을 얻습니다

by º기록 2020. 10. 28.
반응형

user_id 당 월 평균 비용을 찾으려고하는데 사용자 당 평균 비용 또는 사용자 당 월간 비용 만 얻을 수 있습니다.

사용자 및 월별로 그룹화하기 때문에 groupby 출력을 다른 것으로 변환하지 않는 한 두 번째 groupby (월)의 평균을 얻을 수있는 방법이 없습니다.

이것은 내 df입니다.

     df = { 'id' : pd.Series([1,1,1,1,2,2,2,2]),
            'cost' : pd.Series([10,20,30,40,50,60,70,80]),
            'mth': pd.Series([3,3,4,5,3,4,4,5])}

   cost  id  mth
0    10   1    3
1    20   1    3
2    30   1    4
3    40   1    5
4    50   2    3
5    60   2    4
6    70   2    4
7    80   2    5

월별 합계를 얻을 수 있지만 각 user_id의 월 평균을 원합니다.

df.groupby(['id','mth'])['cost'].sum()

id  mth
1   3       30
    4       30
    5       40
2   3       50
    4      130
    5       80

나는 다음과 같은 것을 원한다.

id average_monthly
1 (30+30+40)/3
2 (50+130+80)/3

 

해결 방법

 

색인 재설정이 작동합니다. 이 시도:

In [19]: df.groupby(['id', 'mth']).sum().reset_index().groupby('id').mean()  
Out[19]: 
    mth       cost
id                
1   4.0  33.333333
2   4.0  86.666667

원하는 경우 개월 을 삭제할 수 있습니다. 논리는 sum 부분 뒤에 다음과 같은 것입니다.

In [20]: df.groupby(['id', 'mth']).sum()
Out[20]: 
        cost
id mth      
1  3      30
   4      30
   5      40
2  3      50
   4     130
   5      80

이 시점에서 인덱스를 재설정하면 고유 한 월이 제공됩니다.

In [21]: df.groupby(['id', 'mth']).sum().reset_index()
Out[21]: 
   id  mth  cost
0   1    3    30
1   1    4    30
2   1    5    40
3   2    3    50
4   2    4   130
5   2    5    80

이번에는 sum 대신 mean 을 사용하여 다시 그룹화하면됩니다. 이것은 당신에게 평균을 줄 것입니다.

도움이되는지 알려주세요.

 

참조 페이지 https://stackoverflow.com/questions/40066837

 

 

반응형

댓글