2017-07-10 1 views
3

これは便利なので使用しています。Python:パンダは.describe()バージョンでスライスを使用しています。バージョンが0.20より大きい

http://nbviewer.jupyter.org/gist/aflaxman/436cde71f85b93638959

df = pd.DataFrame({'A': [0,0,0,0,1,1], 
        'B': [1,2,3,4,5,6], 
        'C': [8,9,10,11,12,13]}) 

This use to work!

動作するようにこれを使用!今

>>> pandas.__version__ 
u'0.20.3' 

df.groupby('A').describe().unstack()\ 
    .loc[:,(slice(None),['count','mean']),] 

は与える:列の場合

TypeError: '['count', 'mean']' is an invalid key 

答えて

3

をバージョン0.20.0にgroupby describe formattingを変更されたため、unstackを削除します。

df = df.groupby('A').describe().loc[:,(slice(None),['count','mean'])] 
print (df) 

     B   C  
    count mean count mean 
A      
0 4.0 2.5 4.0 9.5 
1 2.0 5.5 2.0 12.5 

MultiI ndexはindexにありますので、最初に:が削除されます。これはすべてのインデックス値を選択するためです。

df = df.groupby('A').describe().unstack()\ 
    .loc[(slice(None),['count','mean'],slice(None))] 

print (df) 

      A 
B count 0  4.0 
      1  2.0 
    mean 0  2.5 
      1  5.5 
C count 0  4.0 
      1  2.0 
    mean 0  9.5 
      1 12.5 
dtype: float64 

代替ソリューション:

idx = pd.IndexSlice 
df = df.groupby('A').describe().unstack()\ 
    .loc[idx[:,['count','mean'],:]] 

print (df) 
      A 
B count 0  4.0 
      1  2.0 
    mean 0  2.5 
      1  5.5 
C count 0  4.0 
      1  2.0 
    mean 0  9.5 
      1 12.5 
dtype: float64 

df = df.groupby('A').describe().unstack()\ 
    .loc(axis=0)[:,['count','mean'],:] 

print (df) 
      A 
B count 0  4.0 
      1  2.0 
    mean 0  2.5 
      1  5.5 
C count 0  4.0 
      1  2.0 
    mean 0  9.5 
      1 12.5 
dtype: float64 

詳細pandas documentation - using slicersの情報MultiIndex3 levelsを有するため

はまた、slice(None)添加ありました。

+0

編集された回答を参照してください。 – jezrael

+0

ええ、アンスタックだったので、行動が変わりました。 – Merlin

+0

はい、正確です。データフレームを再構築し、インデックスにMultiIndexを作成します。 – jezrael

関連する問題