【问题标题】:Plotting histogram in Pandas/matplotlib for each hour of the day在 Pandas/matplotlib 中绘制一天中每个小时的直方图
【发布时间】:2021-03-06 14:54:17
【问题描述】:

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

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

我当前的数据框被多索引为DayHour(这可能不正确,无法实现我的目标,如果需要我可以更改它)。

我能够使用groupby 获得时间范围内的每小时平均回报 (df.groupby("Hour").mean()),并认为我可以使用类似的方法来绘制我的分布。

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

【问题讨论】:

    标签: python python-3.x pandas matplotlib distribution


    【解决方案1】:

    以非常简单的数据为例(仅 3 天的上午 9 点到 10 点和上午 10 点到 11 点):

    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() 是不太直观的做法。)。这是打印每个 groupby 组的输出:

              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)
    

    【讨论】:

      猜你喜欢
      • 2014-02-28
      • 2020-10-25
      • 2019-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-07
      • 2016-08-13
      • 1970-01-01
      相关资源
      最近更新 更多