2016-04-27 3 views
0

私は、列でグループ化されたパンダのデータフレームにscipy.statsを適用する必要があります。私は結果のDataFrameの列の名前を保持できるようにしたいと思います。ここに私がこれまで持っているものがあります。)(pandas.DataFrame.groupby.apply後の列の名前を変更し

デモ用のランダムデータから始めます。

df = pd.DataFrame(np.random.randn(10, 5), 
      columns=['a', 'b', 'c', 'd', 'e']) 
df['category'] = pd.Series(["1","2","3","1","1","3","2","3","1","2"]) 
df.head() 

出力:

a   b   c   d   e   category 
0 -0.384575 -1.722937 0.868886 -1.843398 -1.659861 1 
1 1.170742 -2.732823 0.974790 -0.167318 0.399720 2 
2 -0.330587 -0.214645 -0.196441 0.768405 1.256272 3 
3 0.961955 -0.270461 -0.226601 1.911941 -0.595420 1 
4 0.596214 0.122938 2.420786 0.113196 0.734691 1 

はここsum()機能を使用して、私が何をしたいの例です:

grouped = df.groupby('category') 
grouped.sum() 

出力:列が持っていることを

a   b   c   d   e 
category      
1 -0.246350 -0.973571 4.525511 2.690969 -2.216404 
2 2.238123 -3.794821 -0.457655 -1.248493 -0.342675 
3 -1.049097 1.359168 1.125174 0.659131 2.139560 

お知らせ正しいラベル。今の問題のため:

grouped.apply(kurtosis) 

出力:これはもはやデータフレームで、カラム名を持っていないことを

category 
1 [-1.40177576836, -1.02037807436, -1.1792712163... 
2      [-1.5, -1.5, -1.5, -1.5, -1.5] 
3      [-1.5, -1.5, -1.5, -1.5, -1.5] 
dtype: object 

注意。だから私は、指定された名前を持つシリーズスマート、および出力を取得しよう - しかし、それは動作しません:

grouped.apply(lambda x: pd.Series(kurtosis(x), name=x.name)) 

出力:

 0   1   2   3   4 
category      
1 -1.401776 -1.020378 -1.179271 -1.384131 -0.984184 
2 -1.500000 -1.500000 -1.500000 -1.500000 -1.500000 
3 -1.500000 -1.500000 -1.500000 -1.500000 -1.500000 

任意のアイデア?私は何が欠けていますか?それがなぜ起こるか

答えて

2

わからない(私が代わりにTypeError上げる)がありますが、aggを使用することができます。

df.groupby("category").agg(kurtosis) 
Out[16]: 
       a   b   c   d   e 
category             
1  -1.18953 -1.013635 -1.756748 -1.167473 -1.271358 
2  -1.50000 -1.500000 -1.500000 -1.500000 -1.500000 
3  -1.50000 -1.500000 -1.500000 -1.500000 -1.500000 
+2

シンプルで素敵な – MaxU

+0

感謝を! - これは私の関数のほとんどで働いていましたが、残ったものについては以下のように変更できました: 'df.groupby(" category ").gg(lambda x:kstest(x、 'norm')[1]) '。 '[1]'は 'kstest'関数のp値出力のみをとります。 – proinsias

関連する問題