如何根据列值(用户 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.099148
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 和关于箱线图的一切,这超出了这个答案的范围,但我希望它对你有用
我是 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.099148 |
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 和关于箱线图的一切,这超出了这个答案的范围,但我希望它对你有用