【发布时间】:2021-01-06 14:05:52
【问题描述】:
我有一个时间序列数据,其中包含每 15 分钟时间段获取的价格值。我想转换每个时间块变成一列的数据,我们得到一个特定日期的一行。 例如,包含 2 列 - ['Date-Time', 'Price'] 的数据框会生成 1+96 列 - ['Date'] 和每个时间块的 96 列的数据框。
这是我为将小时数转换为列而编写的代码 - 给出了 24 列小时数。如何将 15 分钟明智地转换为 96 列-
def transform_to_hour_cols(series):
df = pd.DataFrame()
start = series.index.min()
end = series.index.max()
df['year'] = series.index.year
df['month'] = series.index.month
df['day'] = series.index.day
df['hours'] = series.index.hour
df['loads'] = series.values
df = df.set_index(['year', 'month', 'day', 'hours'], append=True).unstack()
df = df.groupby(['year', 'month', 'day']).sum()
df.reset_index(inplace=True)
df.drop(['year', 'month', 'day'], axis=1, inplace=True)
date_list = pd.date_range(start=start, end=end, freq='D').strftime('%Y-%m-%d')
df.index = pd.DatetimeIndex(date_list, name='date')
return df
price = transform_to_hour_cols(df['Price'])
price.head()
这是示例数据框-
【问题讨论】:
-
您可以使用
Series.dt.minute来获得精确的分布。由于您的数据只有 15 分钟的窗口,它会自动调整。
标签: python-3.x pandas time-series python-datetime