다양한 부울 배열 조합을 키로 사용하는 pandas groupby 결과
부울 배열을 키로 사용하여 그룹을 이해하려고했습니다. 여기에 테스트 코드가 있습니다.
a = pd.DataFrame([[True,False,False],[False,True,False]], columns=['A','B','C'])
print(a)
A B C
0 True False False
1 False True False
그런 다음 부울 배열의 다른 조합을 시도했는데, 이는 groupby 결과가 모두 동일한 r 인 것 같습니다.
b=a.groupby([False,False])
b.apply(pd.DataFrame)
A B C
0 True False False
1 False True False
c=a.groupby([True,False])
c.apply(pd.DataFrame)
A B C
0 True False False
1 False True False
d=a.groupby([False,True])
d.apply(pd.DataFrame)
A B C
0 True False False
1 False True False
e=a.groupby([False,True])
e.apply(pd.DataFrame)
A B C
0 True False False
1 False True False
답변
분해 해보자
.groubpy().apply(pd.DataFrame)
모든 변형에서 사용하면 각 그룹에서 행을 가져와 기본적으로를 반환하는 데이터 프레임을 생성 self
하므로 출력은 동일하게 보이지만 판다가 도착하는 방식은 모든 경우에 다릅니다.
b=a.groupby([False,False])
: 두 행 모두 동일한 그룹 (group_idFalse
) 에 속하며 한 번 함께 구문 분석되어 동일한 df를 형성합니다.c=a.groupby([True,False])
: 각각 하나의 행이있는 두 그룹이 있습니다. Apply는 각 그룹을 가져와 두 개의 개별 DataFrame (그룹당 하나씩)을 빌드합니다. 그런 다음 원본과 동일한 df를 연결하고 반환합니다.d=a.groupby([False,True])
: # 2와 동일하지만 이제 첫 번째 행이 그룹에 속합니다False
. pandas.DataFrame 이외의 다른 함수를 집계하거나 적용하면 df가True, False
인덱스 (기본적으로 groupby sorts)로 표시되고 행 1은 그룹에 속하기 때문에 첫 번째 행으로 표시됩니다.True
이는 전달하는 그룹화 매개 변수가 데이터 프레임을 필요한 부분으로 분할 할 수 없기 때문입니다. 따라서 전체 데이터 프레임을 복사하고 전달하는 그룹화 배열로 '압축'합니다. 예-
a = pd.DataFrame([[True,False,False],[False,True,False]], columns=['A','B','C'])
c = a.groupby([True,False])
print('length of grouper object:',len(c))
print(' ')
print(list(c)[0])
print(' ')
print(list(c)[1])
length of grouper object: 2
(False, A B C
1 False True False)
(True, A B C
0 True False False)
그룹화 배열 [False, True]를 사용하면 단순히 전체 데이터 프레임 a를 각각 압축합니다. 대신 축 1에서 찾을 수있는 것을 전달했다면 데이터 세트를 그룹화하기 위해 해당 시리즈의 항목을 고려합니다.
그것을 보는 또 다른 방법은 그룹화 매개 변수가 이름이있는 시리즈 여야하고이 이름이 데이터 프레임의 열에서 발견되어야한다는 것입니다. 배열 [True, False]를 전달하면 기본적으로 이름없는 시리즈로 해석되므로 분할을 수행하기위한 키를 가져올 수 없습니다.
groupby의 작동 방식을 이해하려는 경우 따라야 할 좋은 이미지는 다음과 같습니다.

분할은 제공된 키에서 발생하며 키는 인덱스 / 열에서 참조 할 수 있어야합니다. 그렇지 않으면 분할 할 수없고 단순히 각 그룹과 함께 분할되지 않은 데이터 프레임을 반환합니다. 이 첫 번째 단계는 그루퍼가하는 일이고, 다음은 적용 및 결합 단계입니다. 위에서 볼 수있는 튜플 (인쇄 된 출력)에서 apply 함수는 t[1]
각 튜플 의 요소에 대해 작동 한 후이를 t[0]
각 튜플 의 요소와 결합하고 수직으로 연결합니다.