【问题标题】:Pandas groupby to get mean in a certain formatPandas groupby 以某种格式获取平均值
【发布时间】:2020-05-16 08:45:58
【问题描述】:

我有以下数据框df

输出[15]:

                     Run_299  Run_300      Month       Date       bkt
DateTime                                                            
2024-12-31 21:00:00  13       18           2024-12-01 2024-12-31  p
2024-12-31 21:00:00  11       12           2024-12-01 2024-12-31  p
2024-12-31 22:00:00  2         5           2024-12-01 2024-12-31  q
2024-12-31 23:00:00  113     118           2024-12-01 2023-11-30  p
2025-01-01 00:00:00  110     114           2025-01-01 2023-11-30  p

我正在尝试进行以下平均计算:

Date        bkt   mean
2024-12-31  p     13.5
2023-11-30  q     3.5
2023-11-30  p     113.75

地点:

13.5 = average(13, 18, 11, 12)
3.5 =average(2, 5)
113.75=average(113, 118, 110, 114)

我试过了:

df.groupby(['Date', 'bkt']).mean()

但平均值并没有像预期的那样发生。我仍然得到Run_299Run_300

编辑:

我更改了average 以表明我正在尝试计算平均值

【问题讨论】:

    标签: pandas python-3.5


    【解决方案1】:

    在 groupby 之前使用melt

    df_final = (df.melt(['Month','Date','bkt'], value_name='Run_mean')
                  .groupby(['Date', 'bkt']).mean())    
    
    Out[202]:
                    Run_mean
    Date       bkt
    2023-11-30 p      113.75
    2024-12-31 p       13.50
               q        3.50
    

    【讨论】:

      【解决方案2】:

      IIUC 使用 stackgroupby

      new_df = (
          df.set_index(["Date", "bkt"])
          .filter(like="Run")
          .stack()
          .groupby(level=[0, 1])
          .mean()
          .reset_index()
          .rename(columns={0: "Run Mean"})
      )
      

      print(new_df)
      
             Date bkt  Run Mean
      0 2023-11-30   p    113.75
      1 2024-12-31   p     13.50
      2 2024-12-31   q      3.50
      

      【讨论】:

      • 不会用 Date 和 bkt set_index 删除重复的行,即使在原始索引上它们是唯一的?
      猜你喜欢
      • 2020-03-09
      • 2021-10-20
      • 1970-01-01
      • 1970-01-01
      • 2021-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-01
      相关资源
      最近更新 更多