2017-03-10 4 views
1
誰かが次のような問題で私を助けることができれば、私は思っていた

(二重ループを使用して)データフレームに与えられた時系列からの年間平均値を抽出

私が保持している.csvファイルを与えられています過去数年間(2010 - 2016)からの波の高さの測定の情報(下記画像参照)

主波の高さ:

enter image description here

今の問題は、我々が与えられたから、年間平均値を計算すると述べています時系列(内側のループはデータをループし、考慮中の年の最大波の高さをすべて加算するその年の値の数のトラック)。私はかなり多くのだので

df = read_csv('PR1_waves_triaxys_historical.csv', parse_dates=[0], delimiter=',', skipinitialspace=True) 

:私はread_csvを使用して.csvファイルからデータフレームを作成し、「del'functionで不要な列を相殺することができました。この時点で

Pythonの初心者です(そしてプログラミングは全くありません)、私は本当に助けてくれてありがとう!

UPDATE: データフレームは、次の形式で今ある:

Time max_wave_height 
0 2010-07-13 11:00:00 1.60 
1 2010-07-13 12:00:00 1.41 
2 2010-07-13 13:00:00 1.78 
3 2010-07-13 14:00:00 1.98 
4 2010-07-13 15:00:00 2.22 
5 2010-07-13 16:00:00 1.96 
+1

サンプル(3〜5行)のDFをテキスト/ CSV形式で入力し、希望のデータt? [良い再現性のあるパンダの例を作る方法]を読んでください。(0120-998-955) – MaxU

+1

おそらく 'df.groupby (df ['Time'] .dt.year)['max_wave_height']。max() 'しかし、もっと必要な場合はわからない – EdChum

答えて

0

IIUCあなたはこのようにそれを行うことができます。

In [180]: df 
Out[180]: 
       Time max_wave_height 
0 2010-07-13 11:00:00    1.60 
1 2010-07-13 12:00:00    1.41 
2 2010-07-13 13:00:00    1.78 
3 2010-07-13 14:00:00    1.98 
4 2010-07-13 15:00:00    2.22 
5 2010-07-13 16:00:00    3.96 
6 2011-07-13 15:00:00    3.22 
7 2011-07-13 16:00:00    5.55 

In [181]: df.groupby(df.Time.dt.year)['max_wave_height'].agg(['count','max']) 
Out[181]: 
     count max 
Time 
2010  6 3.96 
2011  2 5.55 
+0

あなたの素早い応答に感謝します!しかし、あなたのソリューションでは、二重の 'forループ'の形式を使用していませんか?私が間違っているなら私を訂正してください! –

+0

@T_R、pandas/numpy/scipyという考えは、ループの代わりに高速ベクトル化された解を使うことです。それは通常より速いオーダーです... – MaxU

+0

私は完全にそれを得る!しかし残念なことに、私は二重ループの使用でそれを行うように求められています。これは私が立ち往生した場所です。 –

0

問題を解決するには、最終的には、以下で計算されましたフォーム:

df = read_csv('PR1_waves_triaxys_historical.csv', parse_dates=[0], delimiter=',', skipinitialspace=True) 

del (df['dominant_wave_period'], df['mean_wave_direction'], df['significant_wave_height'], df['mean_wave_direction_spread']) 

for j in range(2010,2017): 
    print (j) 
    A = 0 
    B = 0 

    for i in range(len(df)): 

     if df.iloc[i,0].year == j: 
      A = df.loc[i,'max_wave_height'] + A 
      B = B + 1 
      mean = A/B 
    print (A) 
    print (B) 
    print (mean)  
関連する問題