2016-06-13 8 views
3

私はいくつかの列を持つデータフレームを持っています。私はそれを列に関してグループ化し、別の列に従ってソートしようとしています。私はGROUPBY()を適用した場合 は次のように:パンダのboolオブジェクトは呼び出し可能ではありません。

data.groupby(columnA) 

それはすべてのエラーを吐き出すていない、まだ私はこのようにそれを並べ替えしようとした場合:

data.groupby(columnA).sort(coulmnB) 

それは私

TypeError: 'bool' object is not callable 
を与えます

私はどの列にもboolオブジェクトを持たず、なぜこのエラーが発生しているのか全くわかりません。 どうすればこの問題を解決できますか?私が完全に間違っている場合、2つの異なる列に従ってDataFrameをグループ化してソートするもう1つの方法はありますか? ありがとうございます。

EDIT:

答えて

1

は、私はあなたがGroupBy.applysort_valuesが必要だと思う。しかし、より良いはsort_valuesのみ、see 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は、getエラーの場合:

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 

注:この動作/順序は保証されません、それだけでパンダが外に出ないことを意味しますグループキーを注文する方法...例えば一部のインデックスタイプでは、ソートされることがあります:

In [34]: df.groupby("B", sort=False).sum() 
Out[34]: 
    A 
B 
1 b 
2 a 
関連する問題