2017-03-06 16 views
1

私はPandasの2つのインデックスに基づいて行のサブセットを集計する方法を理解しようとしています。最初の索引は行をグループ化し、2番目の索引は合計する行を決定します。最小限例えば、私はデータフレーム、私は、インデックス12に対応する行を合計することができますが、それでも彼らはインデックスabの下にグループ化されている方法Pandasの条件付き行を集計する

index1 | index2 | value 
------------------------ 
    a | 1 | 10 
    a | 2 | 11 
    a | 3 | 12 
    b | 1 | 20 
    b | 2 | 21 
    b | 3 | 22 

があるとします。私は以下の結果を得た。ここで

index1 | index2 | value 
------------------------ 
    a | 1 | 21 
    a | 2 | 12 
    b | 1 | 41 
    b | 2 | 22 

1index22に対応する行は1の新しいindex2に加算されています。

答えて

2

あなたは、グループ変数として列INDEX2 から新しい配列/シリーズを導出して、和を行うことができます。

df.groupby([df.index1, ~df.index2.isin([1,2]) + 1]).value.sum().reset_index() 

#index1 index2 value 
#0 a  1  21 
#1 a  2  12 
#2 b  1  41 
#3 b  2  22 
+0

おかげで、それは最小限例えば動作しますが、それはスケールしません。 'index2'が' 1,2,3,4'の範囲にある場合、3つの代わりに2つのグループを最後に返します。あなたは答えにいくつかの説明を与えてもらえますか?私はそれを自分のニーズに合わせて調整する方法を考え出すことができますか? – mv3

+1

上記の方法は、1と2をすべて1に変換し、他のすべての値を最終グループ変数として2に変換するので、2つのグループしか持たない。 'df.groupby([df.index1、df.index2.replace(2,1)]]のように、1と2をグループとして組み合わせたい場合は、2を1に置き換えてみてください。 ).value.sum()。reset_index() 'を実行します。この場合、結果索引には '2'が欠けています。 – Psidom

+1

これはすばらしいことですが、後でインデックスを調整します。 – mv3

関連する問題