簡體   English   中英

在 Pandas/matplotlib 中繪制一天中每小時的直方圖

[英]Plotting histogram in Pandas/matplotlib for each hour of the day

我有一個每小時粒度的時間序列數據集,顯示一年中每天每小時的資產價格回報。

我正在嘗試繪制一天中每個小時的收益分布,並認為可能有一種方法可以按小時對收益進行分組,然后繪制每小時的直方圖 - 因此循環/函數/方法的輸出(即我要實現的目標)將是 24 個分布圖,顯示整個時間段內一天中每個小時的收益分布。

我當前的數據幀是多索引的DayHour (這可能不正確實現我的目標,如果需要,我可以更改它)。

我能夠使用groupby獲得時間范圍內的每小時平均回報( df.groupby("Hour").mean() ),並認為我可以使用類似的方法來繪制我的分布。

任何關於如何實現這一目標的建議將不勝感激

具有非常簡單數據的示例(僅 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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM