2017-08-07 5 views
2

私は基本的に私は私のグループ化された要素の和を取得しています私に df.groupby(['grp1','grp2'])['mycol'].sum()テイク最大

以下のようなGROUPBY出力を与えるループにしています。

私は各反復から maxを取りたい

grp1 grp2 
A  1 20 
D  3 40 
E  4 30 
     1 90 
F  1 40 

以下のように私はグループ化されたDFを得ることができ、次の繰り返しで今

grp1 grp2 
A  1 10 
B  1 20 
C  2 30 
D  3 40 
E  4 50 
     1 60 

。 だから2回目の繰り返しの後、私はそうグループは、5回の反復と言う時のピーク値に達した私は年末までに

grp1 grp2 
A  1 20 #because 20 was higher than 10 
B  1 20 #carried as it is 
C  2 30 #carried as it is 
D  3 40 #carried as it is (both were equal) 
E  4 30 #because 90+30 >50+60 
     1 90 
F  1 40 #added 

のような出力を持っています。 これはまっすぐに聞こえる(今まで見た最大の動きを記録する)が、これに近づく方法は得られていない。 私はdf.groupby(['grp1','grp2'])['mycol'].sum().to_dict()をやってみました。新しいdfを読むときにdictを更新するようなことをしました。 (ちょうど試して、どのように更新された辞書を維持するかわからない)または多分私はまだ知りません単純なpandas and npソリューションがあります。

答えて

3

もう一度groupbyを使用できます。

res = pd.concat(list_of_iteration_results) 
res = res.groupby(level=['grp1', 'grp2']).max() 
+0

感謝::-)

  1. 集計コードに示す.max()

で、インデックス(pd.Series.groupby, see level param)によって検索結果(pd.concat)、

  • グループを連結しますしかし、「最大」はどのようにしてそれを比較しなければならないのか分かっていましたか? – pythonRcpp

  • +0

    私はあなたのフォローアップの質問を理解していません:-) 連結後に 'res'を調べると、各インデックスの組み合わせが何回も出現することがあります。 [(A、1)、(B、1)、(A、1)、(A、1)、...]。これは 'level'でグループ化したもので、' max'はそれぞれのグループから最大値をとります。それはあなたの質問に答えますか?@ pythonRcpp? – NTAWolf

    +0

    はい私は 'レベル'が私が心配していたトリックをしていると思います。ありがとう、私は私のサンプルデータを実行すると答えを受け入れるだろう。確かに非常に良い答え..ありがとう – pythonRcpp