[英]Resample time series data
我有一些隨機的每小時時間序列數據,(讓我們補充一些)我如何為每日最大值重新采樣以及為記錄的每日最大值的小時創建一個單獨的 df 列?
import pandas as pd
import numpy as np
from numpy.random import randint
import os
np.random.seed(10) # added for reproductibility
rng = pd.date_range('10/9/2018 00:00', periods=1000, freq='1H')
df = pd.DataFrame({'Random_Number':randint(1, 100, 1000)}, index=rng)
df.index.name = 'Date'
重新采樣隨機值:
daily_summary = pd.DataFrame()
daily_summary['Random_Number_Resamp'] = df['Random_Number'].resample('D').max()
daily_summary.head()
然后嘗試記錄每日最大值發生的小時數......
daily_summary['Hour_Map'] = daily_summary.Random_Number_Resamp.index.strftime('%H').astype('int')
daily_summary
上面的代碼不會拋出屬性錯誤,但hour_map
將為零.. 當創建daily_summary
df 時,如何完成此步驟中也出現hour_map 的情況?
你可以做groupby
:
df.groupby(df.index.normalize())['Random_Number'].agg(['idxmax', 'max'])
輸出(頭):
idxmax max
Date
2018-10-09 2018-10-09 05:00:00 94
2018-10-10 2018-10-10 20:00:00 95
2018-10-11 2018-10-11 15:00:00 97
2018-10-12 2018-10-12 18:00:00 98
2018-10-13 2018-10-13 22:00:00 91
我想我明白你在找什么......
只需在原始 df 中創建一個小時列然后重新采樣:
np.random.seed(10) # added for reproductibility
rng = pd.date_range('10/9/2018 00:00', periods=1000, freq='1H')
df = pd.DataFrame({'Random_Number':randint(1, 100, 1000)}, index=rng)
df.index.name = 'Date'
# create hour column
df['hour'] = df.index.hour
# resample df
daily_summary = df.resample('D').max()
Random_Number hour
Date
2018-10-09 94 23
2018-10-10 95 23
2018-10-11 97 23
2018-10-12 98 23
2018-10-13 91 23
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.