programing

팬더 데이터 프레임에 대한 그룹별 및 pivot_table의 차이

codeshow 2023. 9. 14. 23:44
반응형

팬더 데이터 프레임에 대한 그룹별 및 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

피벗_테이블

pivot_table

그룹별로

groupby

언급URL : https://stackoverflow.com/questions/34702815/difference-between-groupby-and-pivot-table-for-pandas-dataframes

반응형