2016-09-09 5 views
0

にzscore列Iは、Zスコアことをデータフレームには、このような別の列を列を挿入することができる追加:グループ化することによってパンダのデータフレーム

[1] df.insert(<loc>, column='ZofA', value=(df['A']-df['A'].mean())/df['A'].std()) 

I 2でグループ化された列の単純化を行うことができるがこのような他の列:

[2] df.groupby(['C1', 'C2'])['A'].mean() 

は、私は[1]でzscore機能付[2]における単純平均()関数を置き換えるしようとしましたが、それを行う方法を見つけ出すことができなかった、.applyを含みます - 例えば

私の最初の問題は、明らかにグルーピングでzscore列を作成する方法がわかりません。

2番目の問題は、(1)別の列( 'A')からz-スコアを保持するデータフレーム( 'ZofA')に新しい列を挿入し、それらのzスコアを2つの他の列( 'C1'、C2 ')によって定義されるグループ内で計算されます。そして、(3)これをすべて1つのdf.insert()文の中で実行したいと思います。かっことかっこを何かにぶち込んでしまっているのですか、それとも1つの声明であまりにも多くをやろうとしていますか?ありがとう!

+1

本で読んでください:http://pandas.pydata.org/pandas-docs/stable/groupby.htmlドックに正確な例があります – Boud

+0

答えとして投稿し、それが正しいとマークしてくださいあなたの問題を解決しました。 – ayhan

答えて

3

ドキュメントへのポインタありがとうございます。好奇心を抱く人は、私は解決策を投稿すると思った。まず、ラムダにzscore計算を入れます:

zscore = lambda x: (x - x.mean())/x.std() 

魔法の成分は.transformです。

df.insert(<loc>, 'ZofA', df.groupby(['C1', 'C2'])['A'].transform(zscore)) 

解決策は実際には「グループ化:分割適用結合」ドキュメントにあります。あなたはちょうど約半分の "変換"セクションにスクロールする必要があります。私は日付キーについてのことを無視し、groupby文にグループ化カラムを直接接続しました。

関連する問題