如何根据列值(用户 ID)和时间戳范围(每小时)绘制箱线图

How to boxplot depending on a column value (user-id) and a range of timestamps ( hourly )

我是 Python 的新手,我一直在尝试为每个月的不同用户创建不同的箱线图。每个箱线图都附属于特定用户的消费值(以 Kwh 为单位),我希望 X 轴包含从我的体验开始到结束的月份,Y 轴包含该值。

这是我的数据框:

ID_ADDRESS ENERTSTAMP VALUE
0 53 2019-10-30 14:00:00.000000 0.106000
1 53 2019-10-30 15:00:00.000000 0.016000
2 53 2019-10-30 16:00:00.000000 0.041000
3 53 2019-10-30 17:00:00.000000 0.140000
4 53 2019-10-30 18:00:00.000000 0.395000
... ... ... ...
121703 73 2021-05-31 23:00:00.000000 0.09​​9148
121704 75 2021-05-31 23:00:00.000000 0.162000
121705 77 2021-05-31 23:00:00.000000 0.587000
121706 255 2021-05-31 23:00:00.000000 0.122000
121707 466 2021-05-31 23:00:00.000000 0.168000

我试过排序和分组,然后使用 for 循环,但似乎不起作用。我需要一些指导。非常感谢。

从这个样本 df 开始:

df
Out: 
    ID               Stamp     Value
0    0 2021-01-03 23:17:00  8.322590
1    0 2021-01-04 14:46:00  0.955291
2    0 2021-01-05 02:26:00  2.956634
3    0 2021-01-06 20:57:00  4.212490
4    0 2021-01-09 16:28:00  9.219869
..  ..                 ...       ...
95   9 2021-06-25 06:01:00  1.073370
96   9 2021-06-26 22:37:00  8.251078
97   9 2021-06-29 06:20:00  2.502405
98   9 2021-06-29 11:50:00  9.860154
99   9 2021-06-30 14:26:00  8.563433

我首先提取月份以便能够按它对数据进行分组

df["month"] = pd.Index(df.Stamp).to_period("M")
df
Out: 
    ID               Stamp     Value    month
0    0 2021-01-03 23:17:00  8.322590  2021-01
1    0 2021-01-04 14:46:00  0.955291  2021-01
2    0 2021-01-05 02:26:00  2.956634  2021-01
3    0 2021-01-06 20:57:00  4.212490  2021-01
4    0 2021-01-09 16:28:00  9.219869  2021-01
..  ..                 ...       ...      ...
95   9 2021-06-25 06:01:00  1.073370  2021-06
96   9 2021-06-26 22:37:00  8.251078  2021-06
97   9 2021-06-29 06:20:00  2.502405  2021-06
98   9 2021-06-29 11:50:00  9.860154  2021-06
99   9 2021-06-30 14:26:00  8.563433  2021-06

然后我可以像这样调用 groupby 和 boxplot:

df.set_index("ID").groupby("ID").boxplot(by = "month")

索引最好设置为“ID”,然后你也groupby“ID”。当您随后在 groupby 对象上调用 boxplot 时,这将为每个组创建一个图,然后也将对这些图进行分组 by= "month"

对我来说它产生了这个:

为了让它更漂亮,你将不得不研究 matplotlib 和关于箱线图的一切,这超出了这个答案的范围,但我希望它对你有用