設置: 我有一個多指標數據幀數據這樣;熊貓日期時間多指標改變爲日期索引和時間的字段(重新索引)
value
date date
2015-08-13 00:00:00+10:00 2015-08-13 06:30:00+10:00 0.812689
2015-08-13 15:30:00+10:00 0.054290
2015-08-13 16:00:00+10:00 0.206277
2015-08-13 16:30:00+10:00 0.082520
2015-08-13 17:00:00+10:00 0.009448
2015-08-13 17:30:00+10:00 0.000000
2015-08-14 00:00:00+10:00 2015-08-14 06:30:00+10:00 0.000000
2015-08-14 07:00:00+10:00 0.000280
2015-08-14 07:30:00+10:00 0.034119
2015-08-14 08:00:00+10:00 0.168524
2015-08-14 08:30:00+10:00 0.471783
2015-08-14 09:00:00+10:00 0.522409
中間步驟我做第一個指數水平只是日期,第二指數水平只是時間,這是我與完成,
# set index level 0 to dates
day_start=[i.date() for i in data.index.levels[0]]
data.index.set_levels(day_start, level=0, inplace=True)
# set index level 1 to times
interval_start=[i.time() for i in data.index.levels[1]]
data_interval.index.set_levels(interval_start, level=1, inplace=True)
# rename time index
data.index.set_names('time', level=1, inplace=True)
也許不是最好的辦法做到這一點,但它給了,
value
date time
2015-08-13 06:30:00 0.812689
15:30:00 0.054290
16:00:00 0.206277
16:30:00 0.082520
17:00:00 0.009448
17:30:00 0.000000
2015-08-14 06:30:00 0.000000
07:00:00 0.000280
07:30:00 0.034119
08:00:00 0.168524
08:30:00 0.471783
09:00:00 0.522409
問題:我一直沒能下一步是重新索引時間,以便有一個指數從00:00每30分鐘至23:30,其中z eros填入缺少的數據。這將使其每天都保持一致,這可能與數據具有不同的開始/結束時間。即
value
date time
2015-08-13 00:00:00 0.0
00:30:00 0.0
:
06:30:00 0.812689
07:00:00 0.0
07:30:00 0.0
:
15:30:00 0.054290
16:00:00 0.206277
16:30:00 0.082520
:
23:30:00 0.0
等等每一天。嘗試在level = 1上重新索引時,在傳遞30分鐘間隔時間的數組時似乎沒有效果。不知道這是甚麼正確的做法。
下一步:我想什麼後做是data.unstack(等級= 1),因此所有的時間指數成爲列標題。如果我按照原樣散開它,我會重複出現一個奇怪的混搭列(這主要是爲什麼我試圖讓它們在一天之間保持一致)。就像是;
value
time 06:30:00 15:30:00 16:00:00 16:30:00 17:00:00 17:30:00 06:30:00
date
2015-08-13 0.812689 0.05429 0.206277 0.08252 0.009448 0.0 0.0
2015-08-14 0.000000 0.00000 0.000000 0.00000 0.000000 0.0 0.0
2015-08-15 0.000000 0.00000 0.000000 0.00000 0.000000 0.0 0.0
2015-08-16 0.000000 0.00000 0.000000 0.00000 0.000000 0.0 0.0
2015-08-17 0.000000 0.00000 0.000000 0.00000 0.000000 0.0 0.0
在那些日子裏有很多丟失的數據,所以它沒有進入正確的列我猜。我可能從根本上忽略了重新索引中的某些東西,也許我的整個方法不是獲得最終結果的方式。
謝謝!到目前爲止,這工作非常好。將12行代碼(和增長代碼)縮減爲更優雅的4行。我沒有在resample中使用first() - 我沒有提到這個,但原始數據是每5分鐘一次,所以resample('30min')。sum()在這裏完美。此外df.pivot抱怨重複的索引條目,但使用pivot_table似乎避免了這一點。 – Paul