【问题标题】:Issue in renaming the multiple aggregation outcome columns in pandas python重命名pandas python中的多个聚合结果列的问题
【发布时间】:2021-08-21 08:12:26
【问题描述】:

我有一个关于 pandas 中的多重聚合的问题。

最初我有一个显示油价的数据集,详细信息如下:

而数据集的头部如下:

我在这里要做的是得到2014年每个季度的均值和标准差。理想的输出如下:

在我的脚本中,我已经通过这样做创建了季度信息。

但是,我在这里不明白的一件事:

如果我尝试使用此命令这样做

brent[brent.index.year == 2014].groupby('quarter').agg({"average_price": np.mean, "std_price": np.std})

我收到如下错误:

如果我使用以下脚本,那么它可以工作

brent[brent.index.year == 2014].groupby('quarter').agg(average_price=('Price','mean'), 
                                                   std_price=('Price','std'))

所以问题是:

  • 这里的第一种方法有什么问题?
  • 为什么我们需要在这里使用第二种方法?

提前感谢大家的帮助!

【问题讨论】:

    标签: python pandas aggregate-functions


    【解决方案1】:

    这里的第一种方法有什么问题?

    传递了dict,所以pandas从键average_pricestd_price中寻找列,因为如果返回错误,DataFrame中不存在。

    可能的解决方案是在 groupby 之后指定列,并使用聚合函数为指定的新列名称传递元组列表:

    brent[brent.index.year == 2014].groupby('quarter')['Price'].agg([('average_price','mean'),('std_price',np.std)])
    

    这是可能的,因为Price 可以为一列定义多个列名。

    在以后的pandas版本中使用named aggregations

    brent[brent.index.year == 2014].groupby('quarter').agg(average_price=('Price','mean'), 
                                                          std_price=('Price',np.std))
    

    这里是逻辑 - 为每个聚合定义 nw 列名称,聚合列和聚合函数。因此可以聚合具有不同功能的多个列:

    brent[brent.index.year == 2014].groupby('quarter').agg(average_price=('Price','mean'), 
                                                          std_price=('Price',np.std),
                                                          sumQ=('quarter','sum'))
    

    注意,np.std 有默认的ddof=0,pandas stdddof=1,所以输出不同。

    【讨论】:

      猜你喜欢
      • 2020-05-01
      • 2017-11-21
      • 2021-12-24
      • 2020-06-06
      • 1970-01-01
      • 2017-03-06
      • 2017-09-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多