Python熊猫可以完成这些任务吗?

Python熊猫可以完成这些任务吗?,python,pandas,Python,Pandas,我有一个八年(2013-2020)的时间序列数据框架,有小时数据,每年有九个区域,每个区域下有两列(“Gen”、“Load”),如下所示: A ZONE B ZONE ... G ZONE H ZONE I ZONE date_time GEN LOAD GEN LOAD

我有一个八年(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_gen_outliers”(如果有) “A区域”下“GEN”列中的异常值,以及“A\u负载\u异常值”(如果存在) “A区域”下“加载”列中的异常值。新列数为18列

2-新列表示“Gen”列的总和

3-新列表示“加载”列的总和

4-新列表示“GEN”列计算A_GEN_div=单元值/每年分区下“GEN”列的最大值,例如,第一个单元为725.7/725.7=1,第二个单元为436.2/725.1,最后一个单元为218.6/553。等等,所有“GEN”列和“LOAD”列的值相同-建议名称为“A_LOAD_div”

新列数为18列

新列总数为“18*2+2”列


提前谢谢。

我认为这可能会有所帮助。请注意,这将保留列
多索引
。您上面的观点似乎意味着您希望展平您的
多索引
。如果是这样,您可能需要看看这个

1:

2和3:

df.groupby(level=-1, axis=1).sum()
请注意,
MultIndex
列的第一级应该是什么并不清楚

4:


@gofvonx列的第一级是X Zone.df.join(df.divide(df.max()),rsuffix=''u div')根据列中所有值的最大值提供结果,但我希望每年的最大值来计算单元格值/每年的最大值。如上面提到的示例所示。@swhh抱歉-我已更新了我的答案。这是否有效?抱歉,迟到了-上一个代码运行良好,但如果有办法删除列名称以压缩其names@swhh您可以使用
pd.MultiIndex.set_levels
重命名列。例如,请参见以下问题:
df.groupby(level=-1, axis=1).sum()
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')