为一天中的每个小时绘制直方图 Pandas/matplotlib
Plotting histogram in Pandas/matplotlib for each hour of the day
我有一个每小时粒度的时间序列数据集,显示一年中一天中每个小时的资产价格 return。
我正在尝试为一天中的每个小时绘制 returns 的分布,并认为可能有一种方法可以按小时对 returns 进行分组,然后绘制直方图每小时 - 所以 loop/function/method 的输出(即我要实现的目标)将是 24 个分布图,显示整个时间内一天中每小时的 returns 分布期间。
我当前的数据框被多重索引为 Day
、Hour
(这可能无法实现我的目标,如果需要我可以更改它)。
我能够使用 groupby
在时间范围 (df.groupby("Hour").mean()
) 内获得 return 的每小时平均值,并且我认为我可以使用类似的方法来绘制我的分布图。
如有任何关于如何实现此目标的建议,我们将不胜感激
具有非常简单数据的示例(仅上午 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()
是的,groupby
已经准确地完成了您想要的操作——将 DataFrame 分组。
然后您可以轻松地遍历这些组并单独绘制每个组。
(事实上 ,对我来说,在组列表上调用 .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)
我有一个每小时粒度的时间序列数据集,显示一年中一天中每个小时的资产价格 return。
我正在尝试为一天中的每个小时绘制 returns 的分布,并认为可能有一种方法可以按小时对 returns 进行分组,然后绘制直方图每小时 - 所以 loop/function/method 的输出(即我要实现的目标)将是 24 个分布图,显示整个时间内一天中每小时的 returns 分布期间。
我当前的数据框被多重索引为 Day
、Hour
(这可能无法实现我的目标,如果需要我可以更改它)。
我能够使用 groupby
在时间范围 (df.groupby("Hour").mean()
) 内获得 return 的每小时平均值,并且我认为我可以使用类似的方法来绘制我的分布图。
如有任何关于如何实现此目标的建议,我们将不胜感激
具有非常简单数据的示例(仅上午 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()
是的,groupby
已经准确地完成了您想要的操作——将 DataFrame 分组。
然后您可以轻松地遍历这些组并单独绘制每个组。
(事实上 ,对我来说,在组列表上调用 .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)