2017-12-31 101 views
1

여러 기능 집계를 수행 I 다음 dataframe 있습니다GROUPBY와 팬더

date   in out balance 

01/01/2017 50 70 100 
02/01/2017 100 10 190 
...   ... ... ... 

나는 다음과 같은 코드 (월별로 그룹화) 요약 파일을 만드는 오전 그러나

df2 = df.groupby(pd.TimeGrouper(freq='M')) 
df2 = df.agg({'total_in': 'sum', 'total_out': 'sum', 'balance': 'last'}) 

을, 또한 '가장 큰'및 '가장 큰'열을 만들고 싶습니다.

나는 다음과 같은

df2 = df2.agg({'total_in': 'sum', 'total_out': 'sum', 'largest in': 'max', 'largest out': 'max', 'balance': 'last'}) 

그러나,이 새로운 컬럼에 대한 키 오류가 발생했습니다. Agg 문에 새 열을 만들 수 있기를 바랬지 만, 그렇지 않은 것으로 보입니다.

이제는 정상적인 데이터베이스에이 열을 추가 할 수 있습니다.하지만이 값은 하루에 상대적으로 의미가 없으며 더 많은 작업을 처리 할 수 ​​있어야합니다. 효율적으로

더 좋은 방법이 있나요?

+0

아니요, 이것이 작동하는 방식은 아닙니다. 열쇠는 행동 할 칼럼입니다. 값은 함수 또는 함수 목록입니다. –

+0

'{ 'total_in': [ 'sum', 'max'] ...}'여러 집계를 적용 할 수는 있지만'total_in'에 대한 평준화 된 열로 끝날 것입니다 ... –

답변

2

몇 가지 여기서주의해야 할 -

  1. aggdict 걸립니다. 이 경우 키는 집계를 수행 할 열이며 값은 함수 또는 함수 목록입니다.
  2. pd.TimeGrouper (내역 : v0.21) 대신 pd.Grouper을 사용하십시오. 의 이름을 첫 번째 요소 (예, total_in) -

    f = { 
         'in'  : [('total_in', sum), ('largest_in', max)], 
         'out'  : [('total_out', sum), ('largest_out', max)], 
         'balance' : 'last' 
    } 
    df = df.groupby(pd.Grouper(key='date', freq='1M')).agg(f) 
    

    각 튜플은 두 가지 요소로 구성 -

이는 date 인덱스의 일부가 아닌 가정, 내가 일을 권하고 싶습니다 무엇인가 결과 열, 두 번째 요소 (예 : sum)는 키에 적용 할 함수입니다. 출력은 MultiIndex 열의 데이터 프레임이됩니다.

date이 이미 색인의 일부인 경우 key='date' 비트를 삭제할 수 있습니다.

+1

나는 코드를 사용하여 원하는 CSV를 만드십시오. 많은 감사 (그리고 행복한 새해!) – Jasper