2017-09-01 4 views
0

私はオーバーフローとパンダを積み重ねるのが新しいですが、このプラットフォームに感謝し、興味深い質問があります:NOAA降雨データを取るパンダデータフレームがあります何年もの間に逐次的にいくつかのデータが欠落している時間のCSVフォーマットで)、NaNをゼロに置き換え、NOAAから入手可能なすべての年の水道/配管技術者のためのきれいな時間データファイルを作成します)。しかし、エンジニアはNOAAから利用できる年の1時間ごとの平均である1つの8760(非閏年の時間数)の時間別データファイルを希望します。NOAA降雨データのための年間の毎時平均のPythonとパンダ

たとえば、1987年7月1日午前1時から2001年12月31日午前12時までの1時間ごとのNOAAデータがあります。私は巨大な毎時DFを作っていますが、毎年1時間の平均から毎年8760時間のDFを作成する必要があります(1月1日午前1時から全年にわたって平均、1月1日午前2時の平均すべての年に渡って、...、12月31日から午前12時にかけての平均値(すべての年に渡って)、データの開始と閏年を念頭に置いてください。どのような洞察力をこれを正常に行うには?

+4

ようこそ!コミュニティがあなたを助けることができるように、この質問の形式を整えるためにhttps://stackoverflow.com/help/mcveを見てください。コードサンプル、エラーメッセージ、詳細などを投稿してください。 – thaavik

答えて

0

パンダはこれらの種類のものに最適です。何をする必要がある:

  1. はdatetime型の列
  2. の時間は、平均値を計算するグループ化された行
  3. のマッピングを作成するために、groupbyメソッドを使用して、日、月とあなたのDFで列を作成します。

    import pandas as pd 
    import numpy as np 
    
    #creating some dummy data 
    n_years = 3 
    n_hours = 3 
    st_times = ['01-01-198{0} 00:00'.format(i) for i in range(n_years)] 
    nd_times = ['01-01-198{0} 0{1}:00'.format(i,n_hours-1) for i in range(n_years)] 
    
    indx_list = [] 
    for s, e in zip(st_times, nd_times): 
        indx = pd.date_range(start=s, end=e, freq='H') 
        indx_list.append(indx.values) 
    index = pd.DatetimeIndex(np.concatenate(indx_list,axis=0)) 
    
    data = pd.DataFrame({'rainfall': list(range(n_years*n_hours)), 
           'rainfall_1': list(reversed(range(n_years*n_hours))) 
          }, index=index) 
    
    #creating the hour, day, month, & day columns 
    data.loc[:,'hour'] = data.index.hour.values 
    data.loc[:,'day'] = data.index.day.values 
    data.loc[:,'month'] = data.index.month.values 
    
    #create groups and calculate the mean of each group 
    data.groupby(['month','day','hour']).mean() 
    
    :ここでは、これらのグループ

のダミーのデータセットを作成します&スニペットは、各グループの平均値を計算しています

関連する問題