Pandas에서 동일한 데이터 집합에 대해 다중 단계/순차 집계를 수행하는 방법은 무엇입니까? 마치 각 단계가 다음 단계의 "하위 쿼리"인 것처럼 말입니다.Pandas DataFrame의 다중 단계 집계
내가 같이 SQL에서 생각할 수:
import pandas
import numpy
numpy.random.seed(1)
df = pandas.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar',
'foo', 'bar', 'foo', 'foo'],
'B' : ['one', 'one', 'two', 'three',
'two', 'two', 'one', 'three'],
'C' : numpy.random.randn(8),
'D' : numpy.random.randn(8)})
나는 집계 시도했다 :
SELECT x.A, COUNT(x.B) as B_COUNT, SUM(x.C_SUM) as C_SUM
FROM (
SELECT df.A, df.B, SUM(df.C) as C_SUM
FROM df
GROUP BY df.A, df.B
) x
GROUP BY x.A
Python3.4와 Pandas0.19.2에서 작업은,이 같은 dataframe이 A, B 레벨로 이동 한 다음 해당 데이터 프레임에서 작업합니다 (즉, 인덱스는 'C'이고 열은 키 목록에 없으므로 'A'는 KeyError를 던집니다.)
A_B_AGG = df.groupby(['A','B']).C.sum().to_frame()
A_B_AGG.keys()
#Index(['C'], dtype='object')
#Would like to do this, but throws KeyError
end_result = A_B_AGG.groupby('A').B.size()
궁극적으로, 나는
A B_COUNT C_SUM
bar 3 -3.986264
foo 3 2.945186
이 일의 적절한, 팬더 방법에 대한 의견을 주셔서 감사합니다처럼 보이는 뭔가 ...
을 얻어야한다!
당신은'C.sum()가'무슨 일이 다른 컬럼에 어떻게합니까? 'D' 칼럼은 어떻게됩니까? groupby를 할 때 소수의 컬럼을 집계하고 다른 컬럼을 남겨 둘 수 있습니까? – MYGz
@MYGz 무시됩니다. groupby (...)를 할 때 C는 그룹 변수와 함께 C 열을 선택했다는 의미입니다. – Psidom
감사합니다. 그래서 다른 컬럼에서 다른 종류의 집계를 원한다면'.agg()'를 사용해야합니다. – MYGz