2016-04-29 35 views
1

(ラベルの代わりに)インデックスラベルをグループ化することはできますか?おそらく私は何かを見逃しているので、これは簡単なはずです。pandas groupbyインデックス値

import pandas as pd 
import numpy as np 
df = pd.DataFrame([['a', 'b', 'c'], 
        ['a', 'a', 'b'], 
        ['b', 'b', 'c']], 
        index=['q', 'r', 's'], 
        columns=['x', 'y', 'z']) 
df 
    x y z 
q a b c 
r a a b 
s b b c 

これは私が期待するように動作します

df.groupby('x', axis=0).agg(sum) 

    y z 
x  
a ba cb 
b b c 

しかしこれはKeyError

df.groupby('s', axis=1).agg(sum) 

を失敗しました。私は何を出すために望んでいるだろう

は次のとおりです。

s b c 
q ab c 
r aa b 

は、インデックス値をGROUPBYすることが可能ですか?私はテーブルを転置することができますが、複数のグループを実行する必要があります。それを避けることができれば、エラーが発生しにくくなります。また、axisパラメータでgroupbyを適用する軸が指定されていない場合はどうなりますか?

+0

あなたは 'df.groupby(level = 'b'、axis = 1).agg(sum)'を意味しますか? – EdChum

+0

ありがとう、私は何をしようとしていたのか分かりませんでしたので、私は質問を編集しました。私はマルチインデックスを持っていません。 – johnchase

+0

私の意見では、転位は「正しい」アプローチです。すべてのgroupbyオプションは、どの列の値をグループ化するのかを前提にしています。あなたは転位の使用を含まないように答えを制限しているので、多くの答えを得なければ驚かないでください。私は間違っていると思う、私は好奇心が強い。 – piRSquared

答えて

1

df.groupby('r', axis=1).agg(sum)は、sとする必要があります。たぶんそれはあなたのミスですか?

とにかく、

以下のようなインデックス値に基づいてグループ化することができます。 (私の回避策...)

print df[~df.index.isin(['s'])].groupby(df.loc['s'], axis=1).agg(sum) 

s b c 
q ab c 
r aa b 
+0

あなたは正しいです、例は 'sによってグループ化されているはずです – johnchase

関連する問題