열별로 그룹화된 것을 색인으로 만들지 않고 그룹화하는 판다.
팬더 그룹 바이의 기본 동작은 열 단위의 그룹을 인덱스로 변환하여 데이터 프레임의 열 목록에서 제거하는 것입니다.예를 들어, 이 열이 있는 dataFrame이 있다고 가정합니다.
col1|col2|col3|col4
열을 붙여 그룹을 적용하면.col2그리고.col3이쪽입니다.
df.groupby(['col2','col3']).sum()
데이터 프레임df더 이상은 없습니다.['col2','col3']열 목록에결과 데이터 프레임의 인덱스로 자동 변환됩니다.
제 질문은 열에 그룹별로 그룹을 수행하면서도 그 열을 데이터 프레임에 유지할 수 있는 방법입니다.
df.groupby(['col2','col3'], as_index=False).sum()
이를 위한 또 다른 방법은 다음과 같습니다.
df.groupby(['col2', 'col3']).sum().reset_index()
다음과 같은 다소 상세한 답변이 추가되어 어떤 답변을 사용해야 할지 여전히 혼란스러운 분들을 돕습니다.
첫째, 이 문제에 대해 제안된 두 가지 해결책은 다음과 같습니다.
- 해결책 1:
df.groupby(['A', 'B'], as_index=False).sum() - 해결책 2:
df.groupby(['A', 'B']).sum().reset_index()
둘 다 예상한 결과를 줍니다.
해결책 1:
설명서에서 설명한 바와 같이,as_index는 SQL 스타일 그룹화된 출력을 요청할 것이며, 이는 효과적으로 팬더들이 준비되는 대로 출력에서 열로 그룹화된 이들을 보존하도록 요청할 것입니다.
as_index: boole, default True
집계된 출력의 경우 그룹 레이블을 인덱스로 하는 개체를 반환합니다.DataFrame 입력에만 해당됩니다.as_index= false는 효과적으로 "SQL 스타일" 그룹화된 출력입니다.
예:
주어진 데이터 프레임:
A B C D
0 A 1 0.502130 0.959404
1 A 3 0.335416 0.087215
2 B 2 0.067308 0.084595
3 B 4 0.454158 0.723124
4 B 4 0.323326 0.895858
5 C 2 0.672375 0.356736
6 C 5 0.929655 0.371913
7 D 5 0.212634 0.540736
8 D 5 0.471418 0.268270
9 E 1 0.061270 0.739610
첫 번째 솔루션을 적용하면 다음과 같은 이점이 있습니다.
>>> df.groupby(["A", "B"], as_index=False).sum()
A B C D
0 A 1 0.502130 0.959404
1 A 3 0.335416 0.087215
2 B 2 0.067308 0.084595
3 B 4 0.777483 1.618982
4 C 2 0.672375 0.356736
5 C 5 0.929655 0.371913
6 D 5 0.684052 0.809006
7 E 1 0.061270 0.739610
그룹 기준 열이 올바르게 보존되는 경우.
해결책 2:
두 번째 솔루션을 이해하려면 다음과 같이 이전 명령의 출력을 살펴보겠습니다.as_index = True기본적인 동작입니다.pandas.DataFrame.groupby(문서 확인):
>>> df.groupby(["A", "B"], as_index=True).sum()
C D
A B
A 1 0.502130 0.959404
3 0.335416 0.087215
B 2 0.067308 0.084595
4 0.777483 1.618982
C 2 0.672375 0.356736
5 0.929655 0.371913
D 5 0.684052 0.809006
E 1 0.061270 0.739610
보시다시피 키별 그룹은 데이터 프레임의 인덱스가 됩니다.사용.pandas.DataFrame.reset_index(문서 확인) 데이터 프레임의 인덱스를 열로 되돌리고 기본 인덱스를 사용할 수 있습니다.또한 이전 단계와 동일한 결과로 이어집니다.
>>> df.groupby(['A', 'B']).sum().reset_index()
A B C D
0 A 1 0.502130 0.959404
1 A 3 0.335416 0.087215
2 B 2 0.067308 0.084595
3 B 4 0.777483 1.618982
4 C 2 0.672375 0.356736
5 C 5 0.929655 0.371913
6 D 5 0.684052 0.809006
7 E 1 0.061270 0.739610
벤치마크
첫 번째 솔루션이 두 번째 솔루션에서 1단계와 2단계로 요구 사항을 달성하므로 전자가 약간 더 빠릅니다.
%timeit df.groupby(["A", "B"], as_index=False).sum()
3.38 ms ± 21.2 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
%timeit df.groupby(["A", "B"]).sum().reset_index()
3.9 ms ± 365 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
언급URL : https://stackoverflow.com/questions/32059397/pandas-groupby-without-turning-grouped-by-column-into-index
'programing' 카테고리의 다른 글
| 프로세스를 이름으로 죽이는 방법? (Win32 API) (0) | 2023.10.30 |
|---|---|
| C: 문자열을 연결하는 가장 빠르고 좋은 방법은 무엇입니까? (0) | 2023.10.30 |
| B 트리와 B+ 트리의 차이점은 무엇입니까? (0) | 2023.10.30 |
| ar의 "rcs" 옵션은 무엇을 합니까? (0) | 2023.10.30 |
| PL/SQL 전용 VARCHAR232767 바이트를 모두 만들지 않는 이유는 무엇입니까? (0) | 2023.10.30 |