次の形式の時系列データフレームがあります。
rng = pd.date_range('1/1/2013', periods=1000, freq='10min')
ts = pd.Series(np.random.randn(len(rng)), index=rng)
ts = ts.to_frame(name=None)
私はそれに2つのことをする必要があります:
手順1:インデックスを変更して、毎日が前日の17:00:00に開始するようにします。私はこれを使用して行います:
ts.index = pd.to_datetime(ts.index.values + np.where((ts.index.time >= datetime.time(17)), pd.offsets.Day(1).nanos, 0))
ステップ2:次のようにデータフレームをピボットします。
ts_ = pd.pivot_table(ts, index=ts.index.date, columns=ts.index.time, values=0)
私が抱えている問題は、データフレームをピボットするときに、パンダがステップ1で行ったインデックスの変更を忘れているように見えることです。
これは私が得るものです
00:00:00 00:10:00 00:20:00 ... 23:50:00
2013-01-10 -1.800381 -0.459226 -0.172929 ... -1.000381
2013-01-11 -1.258317 -0.973924 0.955224 ... 0.072929
2013-01-12 -0.834976 0.018793 -0.141608 ... 2.072929
2013-01-13 -0.131197 0.289998 2.200644 ... 1.589998
2013-01-14 -0.991653 0.276874 -1.390654 ... -2.090654
代わりに、これは望ましい結果です
17:00:00 17:10:00 17:20:00 ... 16:50:00
2013-01-10 -2.800381 1.000226 2.172929 ... 0.172929
2013-01-11 0.312587 1.003924 2.556624 ... -0.556624
2013-01-12 2.976834 1.000003 -2.141608 ... -1.141608
2013-01-13 1.197131 1.333998 -2.999944 ... -1.999944
2013-01-14 -1.653991 1.278884 -1.390654 ... -4.390654
編集-明確化注:毎日「17:00:00」に開始し、「16:50:00」に終了することが望ましいことに注意してください。
Python2.7の使用
注: Nickil Maveliによって提示された解決策は答えに近いものですが、日付を間違った方向にシフトしています。アイデアは、Day_t = Day_t-1の「17:00」に開始するというものです。現在、ソリューションはDay_t = Starts at Day_t at'17:00 'を実行しています。
だから私はいくつかの絵を描く必要があったので、ここにあります:
# Step 1:
df1 = df.ix[:, :'16:59'] # http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.ix.html
df2 = df.ix[:, '17:00' : ]
# Step 2:
df3 = df2.shift(periods = 1) # http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.shift.html
# Step 3:
df4 = pandas.concat([df3, df1], axis = 1) # http://pandas.pydata.org/pandas-docs/stable/generated/pandas.concat.html
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加