팬더 데이터 프레임에 대한 그룹별 및 pivot_table의 차이
팬더를 배우기 시작한 지 얼마 되지 않았는데 혹시 팬더와 다른 점이 있는지 궁금합니다.groupby
그리고.pivot_table
기능들.누가 그들 사이의 차이를 이해하는 것을 도와줄 수 있습니까?
둘다요.pivot_table
그리고.groupby
데이터 프레임을 집계하는 데 사용됩니다.결과의 모양에만 차이가 있습니다.
사용.pd.pivot_table(df, index=["a"], columns=["b"], values=["c"], aggfunc=np.sum)
테이블이 생성됩니다.a
행 축에 있습니다.b
열 축에 있으며 값은 다음의 합입니다.c
.
예:
df = pd.DataFrame({"a": [1,2,3,1,2,3], "b":[1,1,1,2,2,2], "c":np.random.rand(6)})
pd.pivot_table(df, index=["a"], columns=["b"], values=["c"], aggfunc=np.sum)
b 1 2
a
1 0.528470 0.484766
2 0.187277 0.144326
3 0.866832 0.650100
사용.groupby
, 주어진 치수가 열에 배치되고, 해당 치수의 각 조합에 대해 행이 생성됩니다.
이 예제에서는 일련의 값 합을 만듭니다.c
, 모든 고유한 조합으로 그룹화된a
그리고.b
.
df.groupby(['a','b'])['c'].sum()
a b
1 1 0.528470
2 0.484766
2 1 0.187277
2 0.144326
3 1 0.866832
2 0.650100
Name: c, dtype: float64
의 유사한 용법groupby
만약 우리가 그것을 생략한다면.['c']
. 이 경우 모든 나머지 열의 합을 고유 값으로 그룹화한 데이터 프레임(일련이 아님)을 생성합니다.a
그리고.b
.
print df.groupby(["a","b"]).sum()
c
a b
1 1 0.528470
2 0.484766
2 1 0.187277
2 0.144326
3 1 0.866832
2 0.650100
pivot_table = group by + unstack and group by = pivot_table + stack hold True.
특히 만약columns
의 매개 변수pivot_table()
사용되지 않는 경우groupby()
그리고.pivot_table()
둘 다 동일한 결과를 생성합니다(동일한 집계 함수를 사용하는 경우).
# sample
df = pd.DataFrame({"a": [1,1,1,2,2,2], "b": [1,1,2,2,3,3], "c": [0,0.5,1,1,2,2]})
# example
gb = df.groupby(['a','b'])[['c']].sum()
pt = df.pivot_table(index=['a','b'], values=['c'], aggfunc='sum')
# equality test
gb.equals(pt) #True
일반적으로 소스코드를 확인해보면,pivot_table()
내통__internal_pivot_table()
. 이 함수는 인덱스 및 열과 호출 중 하나의 플랫 리스트를 만듭니다.groupby()
이 리스트를 그룹으로 해서 말입니다.그런 다음 집계 후에 전화가 걸려옵니다.unstack()
열 목록에
열이 전달되지 않으면 분리할 것이 없습니다.groupby
그리고.pivot_table
거의 동일한 산출물을 산출하지 않습니다.
이 기능을 시연해 보면 다음과 같습니다.
gb = (
df
.groupby(['a','b'])[['c']].sum()
.unstack(['b'])
)
pt = df.pivot_table(index=['a'], columns=['b'], values=['c'], aggfunc='sum')
gb.equals(pt) # True
~하듯이stack()
는 의 역연산입니다.unstack()
, 다음 내용도 참입니다.
(
df
.pivot_table(index=['a'], columns=['b'], values=['c'], aggfunc='sum')
.stack(['b'])
.equals(
df.groupby(['a','b'])[['c']].sum()
)
) # True
결론적으로, 사용 사례에 따라, 하나가 다른 하나보다 편리하지만, 다른 하나 대신에 그리고 올바르게 적용한 후에 둘 다 사용할 수 있습니다.stack()
/unstack()
, 둘 다 동일한 출력을 생성합니다.
그러나 두 방법 사이에는 성능 차이가 있습니다.요컨대,pivot_table()
보다 느립니다.groupby().agg().unstack()
. 이 답변에서 더 자세히 보실 수 있습니다.
사용하기에 더 적합합니다..pivot_table()
대신에.groupby()
행과 열 레이블을 모두 사용하여 집계를 표시해야 하는 경우.
.pivot_table()
를 사용하여 비슷한 결과를 얻을 수 있더라도 행 및 열 레이블을 동시에 쉽게 만들 수 있으며 선호합니다..groupby()
별 조치 없이
의 차이 pivot_table
그리고.groupby
피벗_테이블
그룹별로
언급URL : https://stackoverflow.com/questions/34702815/difference-between-groupby-and-pivot-table-for-pandas-dataframes
'programing' 카테고리의 다른 글
wp.mce.views gallery 재정의 기본 'slot-slot' 템플릿 (0) | 2023.09.14 |
---|---|
python win32 COM 마감 엑셀 워크북 (0) | 2023.09.14 |
라라벨에서 서비스 컨테이너의 개념은? (0) | 2023.09.14 |
주석에 포함되지 않은 경우 특정 내용을 선택하는 정규식 (0) | 2023.09.14 |
Python에서 *.wav 파일 읽기 (0) | 2023.09.14 |