2016-06-13 8 views
3

여러 개의 열이있는 데이터 프레임이 있는데 그 열을 기준으로 그룹화하고 다른 열에 따라 정렬하려고합니다. 이 같은 GROUPBY()를 적용하는 경우 :Pandas 'bool 객체를 호출 할 수 없습니다.'

data.groupby(columnA) 

가 오류를 뱉어하지 않습니다, 그러나 나는 이런 식으로 정렬하려고하면 :

data.groupby(columnA).sort(coulmnB) 

그것을 나에게

TypeError: 'bool' object is not callable 
를 제공을

필자는 어떤 열에도 bool 개체가 없으며이 오류가 발생한 이유에 대해 전혀 알지 못합니다. 이 문제를 어떻게 해결할 수 있습니까? 만약 완전히 잘못하고있다면, 두 개의 서로 다른 열에 따라 DataFrame을 그룹화하고 정렬하는 또 다른 방법은 무엇입니까? 미리 감사드립니다.

편집 :

답변

1

난 당신이 GroupBy.applysort_values 필요하다고 생각하지만, 더 나은 sort_valuessee Andy's answer 사용하고 있습니다.

import pandas as pd 

data = pd.DataFrame({'columnA':[1,2,3,3,1,2], 
        'columnB':[7,5,6,1,2,4], 
        'columnC':[7,8,9,1,8,0]}) 

print (data) 
    columnA columnB columnC 
0  1  7  7 
1  2  5  8 
2  3  6  9 
3  3  1  1 
4  1  2  8 
5  2  4  0 

print (data.groupby('colA').apply(lambda x:x.sort_values('colB')).reset_index(drop=True)) 
    colA colB colC 
0  1  2  8 
1  1  7  7 
2  2  4  0 
3  2  5  8 
4  3  1  1 
5  3  6  9 

print (data.groupby('colA').apply(lambda x:x.sort_values('colC')).reset_index(drop=True)) 
    colA colB colC 
0  1  7  7 
1  1  2  8 
2  2  4  0 
3  2  5  8 
4  3  1  1 
5  3  6  9 

sort을 사용되지 않습니다.

하지만

사용 sort_values 오류 얻을 경우 :

print (data.groupby('colA').sort_values('colB')) 

AttributeError: Cannot access callable attribute 'sort_values' of 'DataFrameGroupBy' objects, try using the 'apply' method

3

먼저 COLUMNB 다음 COLUMNA을 기준으로 정렬 할 때문에, 당신은 단지 sort_values를 사용하여이 작업을 수행 할 수 있습니다

# using jezrael's example 
In [11]: data.sort_values(["columnA", "columnB"]) 
Out[11]: 
    columnA columnB columnC 
4  1  2  8 
0  1  7  7 
5  2  4  0 
1  2  5  8 
3  3  1  1 
2  3  6  9 

In [12]: data.sort_values(["columnA", "columnB"], ascending=[True, False]) 
Out[12]: 
    columnA columnB columnC 
0  1  7  7 
4  1  2  8 
1  2  5  8 
5  2  4  0 
2  3  6  9 
3  3  1  1 

참고 : sort은 groupby의 (부울) 속성이므로 c가 될 수 없습니다 alled :

In [21]: data.groupby("columnA").sort 
Out[21]: True 

In [22]: data.groupby("columnA", sort=False).sort 
Out[22]: False 

In [23]: True() 
TypeError: 'bool' object is not callable 

당신이 다음과 같은 예를 내부적으로 무엇을 볼 수 있습니다

In [31]: df = pd.DataFrame([["b", 1], ["a", 2]], columns=["A", "B"]) 

In [32]: df.groupby("A").sum() 
Out[32]: 
    B 
A 
a 2 
b 1 

In [33]: df.groupby("A", sort=False).sum() 
Out[33]: 
    B 
A 
b 1 
a 2 

참고 :이 동작/순서가 보장되지, 그냥 팬더가 외출하지 않음을 의미는 groupby 키를 주문하는 방법 ... 예. 일부 인덱스 유형의 경우 정렬 할 수 있습니다.

In [34]: df.groupby("B", sort=False).sum() 
Out[34]: 
    A 
B 
1 b 
2 a 
관련 문제