2016-05-02 11 views
0

私は時系列データを持っています。Python - 概要日付と名前を使用した統計

1)それぞれの名前の場合:私は、このデータセット上のいくつかの要約データ解析を行う必要があり、A、B、C、Dの

:データのキーは、日付や名前であり、データは4つの属性を持っています各名前についてA、B、C及びDの平均

2)、各名についてA、B、C、及びD

3)の標準偏差は、合計の割合としてのNaNの数を数えますA、B、C、Dのそれぞれについて

私はRに精通していますが、pythonには慣れていません。あなたが正しい方向に私を向けることができれば、それ以上のものになるでしょう!ありがとうございました。

asof_dt = pd.date_range('20151231','20160130') 
df1=pd.DataFrame(np.random.randn(len(asof_dt),4),index=asof_dt,columns=('A','B','C','D')) 
df1['name']='alpha' 
df2=pd.DataFrame(np.random.randn(len(asof_dt),4),index=asof_dt,columns=('A','B','C','D')) 
df2['name']='beta' 
df3=pd.DataFrame(np.random.randn(len(asof_dt),4),index=asof_dt,columns=('A','B','C','D')) 
df3['name']='gama' 
df_total = pd.concat([df1,df2,df3]) 
df_total[['name','A','B','C']] 

答えて

1

あなたが探しているのはgroupByです。ご例えば

import pandas as pd 

df_total.groupby(['name']).mean() 
df_total.groupby(['name']).std() 
df_total.groupby(['name']).apply(pd.isnull).sum()/df_total.groupBy(['name']).size() 
+0

は、すべてのもののように思えます"groupBy"を小文字の "groupby"に変更すると動作します。しかし、最後のものは動作しません: AttributeError: 'DataFrameGroupBy'オブジェクトの呼び出し可能な属性 'isnull'にアクセスできない、 'apply'メソッドを試してください –

+0

@TrexionKameha:これは、まずそれを実行せずにコードを投稿するためのものです: )。 'pandas.isnull'関数で' apply'を使うと、同じ効果を得ることができます。editを参照してください。 – spiffman

+0

%NaNを取得するには、 'count'によって提供された非NULL値の数ではなく、総数(長さ)で除算する必要があります。 – Alexander

1

describeはあなたにかなりの情報を提供します:

>>> df_total.describe() 

       A   B   C   D 
count 93.000000 93.000000 93.000000 93.000000 
mean 0.006006 0.136171 0.024950 0.039227 
std  0.987713 0.996221 1.042611 0.946783 
min -2.193879 -2.958631 -3.012410 -2.714318 
25% -0.604479 -0.436393 -0.514906 -0.574699 
50%  0.012784 0.191079 0.062942 0.087534 
75%  0.535302 0.701117 0.666500 0.833580 
max  2.578850 2.483724 2.460043 2.282775 

ちょうど数、平均値およびSDを取得するには:

>>> df_total.groupby('name').apply(lambda group: group.describe().head(3)) 

    A   B   C   D 
name             
alpha count 31.000000 31.000000 31.000000 31.000000 
     mean -0.076509 0.152993 0.149915 0.180412 
     std  1.056520 1.063591 1.010325 0.778637 
beta count 31.000000 31.000000 31.000000 31.000000 
     mean 0.022814 0.247238 -0.006391 0.059466 
     std  0.862030 0.870068 1.065224 1.055671 
gama count 31.000000 31.000000 31.000000 31.000000 
     mean 0.071712 0.008283 -0.068673 -0.122199 
     std  1.058608 1.060826 1.073273 0.990097 
+0

少年...それは簡単でした...ありがとう。 –

+0

NaNのカウントに簡単な方法はありますか? –

+0

%NaNを取得するには:df_total.groupby( 'name')。apply(ラムダグループ:group.isnull()。sum()。div(len(group))) ' – Alexander

関連する問題