【问题标题】:Calculate ratio of multi groupby average to groupby average计算多分组平均值与分组平均值的比率
【发布时间】:2019-03-02 21:55:52
【问题描述】:

我想生成一个包含尽可能多的项目 len(hr_avg) 的 Dataframe,其中新 Dataframe 的值是一个月的小时平均值除以同一个月的月平均值。

以下代码是生成将进入最终计算的两个数据集的示例代码。我可以遍历 hr_avg 并逐项计算,但如果可以的话,我更希望数据帧操作同时完成所有这些操作。

import numpy as np
import pandas as pd

i = pd.date_range('2012-01-01 00:00', '2018-12-31 23:00', freq='H')
x = np.random.randint(1, 100, len(i))

df = pd.DataFrame(data=x, index=i)

hr_avg = df.groupby([df.index.month, df.index.hour]).mean()
mo_avg = df.groupby([df.index.month]).mean()

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    我对您的列名进行了一些重构,将每月平均数与每小时平均数结合起来并执行了计算:

    import numpy as np
    import pandas as pd
    
    i = pd.date_range('2012-01-01 00:00', '2018-12-31 23:00', freq='H')
    x = np.random.randint(1, 100, len(i))
    
    df = pd.DataFrame(data=x, index=i)
    hr_avg = df.groupby([df.index.month, df.index.hour]).mean().reset_index().rename(columns={'level_0': 'month', 'level_1': 'hour', 0: 'hour_avg'}).set_index('month')
    mo_avg = df.groupby([df.index.month]).mean().reset_index().rename(columns={'index': 'month', 0: 'month_avg'}).set_index('month')
    # Join the dataframes so each hour_avg entry has the corresponding mo_avg entry
    res_df = hr_avg.join(mo_avg).reset_index().set_index(['month', 'hour'])
    # Your calculation - hour_avg divided by monthly_avg
    res_df['hour_divided_by_month'] = res_df['hour_avg'] / res_df['month_avg']
    

    输出

                    hour_avg    month_avg   hour_divided_by_month
    month   hour            
    1          0    51.746544   50.378072   1.027164
    1          1    53.921659   50.378072   1.070340
    1          2    49.649770   50.378072   0.985543
    1          3    52.087558   50.378072   1.033933
    1          4    48.322581   50.378072   0.959199
    

    等等。

    【讨论】:

    • 看起来不错,将最后一行更改为res_df['hour_divided_by_month'] = res_df['hour_avg'] / res_df['month_avg']
    猜你喜欢
    • 1970-01-01
    • 2021-07-07
    • 2017-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-25
    • 2019-09-04
    相关资源
    最近更新 更多