2017-08-16 12 views
1

私は、1963年に始まり2013年に終了する長いシリーズを持っています。しかし、1963年から2007年のサンプリング期間は2007年のサンプリングレートを5分に変更した後です。 2007年の直後にデータを再サンプリングすることは可能ですか?以下のデータスライス。パンダを使用したデータフレームの特定の期間のダウンサンプリング

yr, m, d, h, m, s, sl 
2007, 11, 30, 19, 0, 0, 2180 
2007, 11, 30, 20, 0, 0, 2310 
2007, 11, 30, 21, 0, 0, 2400 
2007, 11, 30, 22, 0, 0, 2400 
2007, 11, 30, 23, 0, 0, 2270 
2008, 1, 1, 0, 0, 0, 2210 
2008, 1, 1, 0, 5, 0, 2210 
2008, 1, 1, 0, 10, 0, 2210 
2008, 1, 1, 0, 15, 0, 2200 
2008, 1, 1, 0, 20, 0, 2200 
2008, 1, 1, 0, 25, 0, 2200 
2008, 1, 1, 0, 30, 0, 2200 
2008, 1, 1, 0, 35, 0, 2200 
2008, 1, 1, 0, 40, 0, 2200 
2008, 1, 1, 0, 45, 0, 2200 
2008, 1, 1, 0, 50, 0, 2200 
2008, 1, 1, 0, 55, 0, 2200 
2008, 1, 1, 1, 0, 0, 2190 
2008, 1, 1, 1, 5, 0, 2190 

ありがとうございます!

答えて

2

はここ

df.columns = 'year month day hour minute second sl'.split() 

ソリューション

df.groupby(['year', 'month', 'day', 'hour'], as_index=False).first() 

    year month day hour minute second sl 
0 2007  11 30 19  0  0 2180 
1 2007  11 30 20  0  0 2310 
2 2007  11 30 21  0  0 2400 
3 2007  11 30 22  0  0 2400 
4 2007  11 30 23  0  0 2270 
5 2008  1 1  0  0  0 2210 
6 2008  1 1  1  0  0 2190 

オプション2
は、列の名前変更のオフに構築するオプションは、あなたのデータフレームの適切な列名を付けます。我々はpd.to_datetimeを使用して当日に巧みに手​​に入れ、resampleを使用します。しかし、時間のギャップがあり、ヌルとdtypeの再キャストに対処する必要があります。

df.set_index(
    pd.to_datetime(df.drop('sl', 1)) 
).resample('H').first().dropna().astype(df.dtypes) 

        year month day hour minute second sl 
2007-11-30 19:00:00 2007  11 30 19  0  0 2180 
2007-11-30 20:00:00 2007  11 30 20  0  0 2310 
2007-11-30 21:00:00 2007  11 30 21  0  0 2400 
2007-11-30 22:00:00 2007  11 30 22  0  0 2400 
2007-11-30 23:00:00 2007  11 30 23  0  0 2270 
2008-01-01 00:00:00 2008  1 1  0  0  0 2210 
2008-01-01 01:00:00 2008  1 1  1  0  0 2190 
2

便宜上分のカラムの名前を変更します。

df.columns = ['yr', 'm', 'd', 'h', 'M', 's', 'sl'] 

はdatetime型の列を作成します。

from datetime import datetime as dt 
df['dt'] = df.apply(axis=1, func=lambda x: dt(x.yr, x.m, x.d, x.h, x.M, x.s)) 

リサンプル:

:パンダ< 0.19の場合

パンダ> = 0.19については

df = df.resample('60T', on='dt') 
+0

これを実行すると、NULLからfloatのギャップとdtypeからヌルを処理する必要があることがわかります。 – piRSquared

2

あなたはより良い最初に、あなたのデータフレームにdatetime型の列を追加したい:
df['datetime'] = pd.to_datetime(df[['yr', 'mnth', 'd', 'h', 'm', 's']])

をしかし、その前に、あなたが月の列名前を変更する必要があります
df.rename(columns={ df.columns[1]: "mnth" })

次に、datetime列をデータフレームインデックスとして設定します。
data.set_index('datetime', inplace=True)

今、あなたはprefereedサンプリングレートでのあなたのデータフレームにリサンプリング法を適用することができます。ここでは df.resample('60T', on='datatime').mean()


は私が集約するを意味を使用しました。必要に応じて他の方法を使用することができます。 Pandas documentを参照してください。

+0

これを実行すると、NULLからfloatのギャップとdtypeからヌルを処理する必要があることがわかります。 – piRSquared

関連する問題