>

나는 df 이렇게

         time  value
0   2019-07-30  124.00
1   2019-07-19  123.00
2   2019-08-28  191.46
3   2019-10-25  181.13
4   2019-11-01  24.23
5   2019-11-13  340.00
6   2020-01-01  36.12
7   2020-01-25  56.12
8   2020-01-30  121.00
9   2020-02-04  115.62
10  2020-02-06  63.62

분기 별 평균으로 그룹화하고 평균 계산에 사용 된 값을 얻고 싶습니다. 아래와 같은 것.

Year  Quarter    Values                              Avg
2019  Q3         124, 123, 191                       146
2019  Q4         181.13, 24.23, 340                  181.78
2020  Q1         36.12, 26.12, 121, 115.62, 63.62    72.96

원하는 결과를 얻으려면 어떻게해야합니까?


  • 답변 # 1

    사용하다 GroupBy.agg 에 의해 생성 된 분기 기간 Series.dt.quarter 결합 값을 string 모래 mean 명명 된 집계에서 :

    df['time'] = pd.to_datetime(df['time'])
    df1 = (df.assign(Year = df['time'].dt.year,
                     Q = 'Q' + df['time'].dt.quarter.astype(str),
                     vals = df['value'].astype(str))
             .groupby(['Year','Q'])
             .agg(Values=('vals', ', '.join), Avg = ('value','mean'))
             .reset_index())
    print (df1)
       Year   Q                              Values         Avg
    0  2019  Q3                124.0, 123.0, 191.46  146.153333
    1  2019  Q4                181.13, 24.23, 340.0  181.786667
    2  2020  Q1  36.12, 56.12, 121.0, 115.62, 63.62   78.496000
    
    

    편집하다:

    df['time'] = pd.to_datetime(df['time'])
    df1 = (df.groupby(df['time'].dt.to_period('Q').rename('YearQ'))['value']
             .agg([('Values', lambda x: ', '.join(x.astype(str))),('Avg','mean')])
             .reset_index()
             .assign(Year = lambda x: x['YearQ'].dt.year,
                     Q = lambda x: 'Q' + x['YearQ'].dt.quarter.astype(str))
             .reindex(['Year','Q','Values','Avg'], axis=1))
    print (df1)
       Year   Q                              Values         Avg
    0  2019  Q3                124.0, 123.0, 191.46  146.153333
    1  2019  Q4                181.13, 24.23, 340.0  181.786667
    2  2020  Q1  36.12, 56.12, 121.0, 115.62, 63.62   78.496000
    
    

  • 답변 # 2

    그룹화를 작성하고 그룹별로 작성하고 색인을 연도 및 분기로 재구성하십시오.

    grouper = pd.Grouper(key='time',freq='Q')
    res = (df
           .assign(temp = df.value.astype(str))
           .groupby(grouper)
           .agg(Values=('temp', ','.join),
                Avg = ('value',np.mean)
               )
          )
    res.index = [res.index.year, 'Q' + res.index.quarter.astype(str)]
    res.index = res.index.set_names(['Year','Quarter'])
    
                           Values                   Avg
    Year    Quarter     
    2019    Q3       123.0,124.0,191.46             146.153333
            Q4       181.13,24.23,340.0             181.786667
    2020    Q1       36.12,56.12,121.0,115.62,63.62 78.496000
    
    

관련 자료

  • 이전 테라 폼을 사용하여 Azure App Service를 응용 프로그램 통찰력 리소스 (신규 또는 기존)와 연결하는 방법은 무엇입니까?
  • 다음 java - cxf-xjc-plugin의 maven mojoexecutionexception - 330