python - Python Pandas 可以完成这些任务吗?
问题描述
我有一个八年(2013-2020)的时间序列数据框有每小时数据,每年有九个区域,每个区域下有两列(“Gen”,“Load”),如下所示:
A ZONE B ZONE ... G ZONE H ZONE I ZONE
date_time GEN LOAD GEN LOAD ... LOAD GEN LOAD GEN LOAD
2013-01-01 00:00:00 725.7 5,859.5 312.2 3,194.7 ... 77.1 706.0 227.1 495.0 861.9
2013-01-01 01:00:00 436.2 450.5 248.0 198.0 ... 865.5 240.7 107.9 640.5 767.3
2013-01-01 02:00:00 464.5 160.2 144.2 068.3 ... 738.7 044.7 32.7 509.3 700.4
2013-01-01 03:00:00 169.9 733.8 268.1 869.5 ... 671.7 649.4 951.3 626.8 652.1
2013-01-01 04:00:00 145.4 553.4 280.2 872.8 ... 761.5 561.0 912.9 552.1 637.3
... ... ... ... ... ... ... ... ... ... ... ...
2020-12-31 19:00:00 450.9 951.7 371.4 516.3 ... 461.7 808.9 471.4 983.7 447.8
2020-12-31 20:00:00 553.0 936.5 848.7 233.9 ... 397.3 978.3 404.3 490.9 233.0
2020-12-31 21:00:00 458.6 735.6 716.8 121.7 ... 385.1 808.0 192.0 131.5 70.1
2020-12-31 22:00:00 515.8 651.6 693.5 142.4 ... 291.4 826.1 16.8 591.9 863.2
2020-12-31 23:00:00 218.6 293.4 448.2 14.2 ... 340.6 435.0 897.4 622.5 768.3
我想要的是以下内容:
1-检测每列中的异常值,该列或多或少是该列标准偏差的三倍,如果“A Zone”下的“GEN”列以及“ A_load_outliers" 如果“A 区”下的“LOAD”列中存在异常值。新列数为 18 列。
2- 一个新列代表“Gen”列的总和
3- 一个新列代表“加载”列的总和
4- 新列代表“GEN”列,计算 A_GEN_div = 单元格值/A 区下“GEN 列每年的最大值”,例如第一个单元格为 725.7/725.7=1,第二个单元格和最后一个单元格为 436.2/725.1 218.6/553. 等,对于所有“GEN”列和“LOAD”列也是如此——建议的名称为“A_Load_div”。
新列数为 18 列。
新列总数为“18 * 2 + 2”列
提前致谢。
解决方案
我认为这可能会有所帮助。请注意,这将保留列MultiIndex
。你上面的观点似乎暗示你想要扁平化你的MultIndex
. 如果是这种情况,您可能想看看这个问题。
1:
df.join(df>(3*df.std()), rsuffix='_outlier')
2和3:
df.groupby(level=-1, axis=1).sum()
请注意,尚不清楚列的第一级MultIndex
应该是什么。
4:
maxima = df.resample('1Y').max()
maxima.index = maxima.index + pd.DateOffset(hours=23)
maxima = maxima.reindex(df.index, method='bfill')
df.join(df.divide(maxima), rsuffix='_div')
推荐阅读
- javascript - 修复旋转元素内的文本方向
- r - 在分组的数据框列表上使用 lapply
- c# - 将文件加载为字节数组,而不在内存中分配它 C#
- android - 为什么 Android BillingClient v2 慢速信用卡测试永远不会取消?
- python - 可以通过“conda install”命令安装所有“pip”包吗?
- c# - 循环此 switch case 语句时遇到问题
- javascript - Javascript 中的 click 函数出错
- c# - Azure Functions 3.0 部署时随机抛出运行时错误
- javascript - 在 JavaScript 中过滤嵌套对象
- python - 尝试开发二十一点游戏的计分系统