以Pandas/matplotlib绘制一天中每小时的柱状图

2024-05-13 20:51:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个每小时粒度的timeseries数据集,显示一年中每天每小时的资产价格回报

我试图绘制一天中每小时的收益分布图,并认为可能有一种方法可以按每小时对收益进行分组,然后绘制每小时的柱状图-因此循环/函数/方法的输出(即我的目标)将是24个分布图,显示整个时间段内一天中每小时的回报分布

我当前的数据帧被多索引为DayHour(这可能不适合实现我的目标,如果需要,我可以更改它)

我能够使用groupby获得整个时间段(df.groupby("Hour").mean())的每小时平均回报率,并且认为我可以使用类似的方法绘制我的分布图

任何关于如何实现这一目标的建议都将不胜感激


Tags: 数据方法目标粒度分布图绘制价格收益
1条回答
网友
1楼 · 发布于 2024-05-13 20:51:19

具有非常简单数据的示例(仅上午9-10点和10-11点,持续3天):

import pandas as pd
import matplotlib.pyplot as plt

arrays = [[1, 1, 2, 2, 3, 3], [9, 10, 9, 10, 9, 10]]
ind = pd.MultiIndex.from_arrays(arrays, names=['Day', 'Hour'])
df = pd.DataFrame({'Price': [34, 35, 37, 31, 30, 29]}, index=ind)

for hour, group in df.groupby("Hour"):
    group.plot(kind='hist', bins=10, title=f'{hour}:00 - {hour+1}:00')
    plt.show()

enter image description here


是的,groupby已经精确地完成了将数据帧分组所需的工作。 然后,您可以轻松地浏览这些组并分别绘制每个组。 (事实上,对我来说,在群组列表中调用.mean()是一件不那么直观的事情。)。这是打印每个分组的输出:

          Price
Day Hour       
1   9        34
    10       35
2   9        37
    10       31
3   9        30
    10       29

(9,           Price
Day Hour       
1   9        34
2   9        37
3   9        30)
(10,           Price
Day Hour       
1   10       35
2   10       31
3   10       29)

相关问题 更多 >