다양한 부울 배열 조합을 키로 사용하는 pandas groupby 결과

Aug 19 2020

부울 배열을 키로 사용하여 그룹을 이해하려고했습니다. 여기에 테스트 코드가 있습니다.

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

답변

RichieV Aug 20 2020 at 04:23

분해 해보자

.groubpy().apply(pd.DataFrame)모든 변형에서 사용하면 각 그룹에서 행을 가져와 기본적으로를 반환하는 데이터 프레임을 생성 self하므로 출력은 동일하게 보이지만 판다가 도착하는 방식은 모든 경우에 다릅니다.

  1. b=a.groupby([False,False]): 두 행 모두 동일한 그룹 (group_id False) 에 속하며 한 번 함께 구문 분석되어 동일한 df를 형성합니다.

  2. c=a.groupby([True,False]): 각각 하나의 행이있는 두 그룹이 있습니다. Apply는 각 그룹을 가져와 두 개의 개별 DataFrame (그룹당 하나씩)을 빌드합니다. 그런 다음 원본과 동일한 df를 연결하고 반환합니다.

  3. d=a.groupby([False,True]): # 2와 동일하지만 이제 첫 번째 행이 그룹에 속합니다 False. pandas.DataFrame 이외의 다른 함수를 집계하거나 적용하면 df가 True, False인덱스 (기본적으로 groupby sorts)로 표시되고 행 1은 그룹에 속하기 때문에 첫 번째 행으로 표시됩니다.True

1 AkshaySehgal Aug 20 2020 at 04:14

이는 전달하는 그룹화 매개 변수가 데이터 프레임을 필요한 부분으로 분할 할 수 없기 때문입니다. 따라서 전체 데이터 프레임을 복사하고 전달하는 그룹화 배열로 '압축'합니다. 예-

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]각 튜플 의 요소와 결합하고 수직으로 연결합니다.