Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中重命名多个聚合结果列时出现问题_Python_Pandas_Aggregate Functions - Fatal编程技术网

在python中重命名多个聚合结果列时出现问题

在python中重命名多个聚合结果列时出现问题,python,pandas,aggregate-functions,Python,Pandas,Aggregate Functions,我有一个关于大熊猫多重聚集的问题 最初我有一个数据集,显示石油价格,细节如下: 数据集的标题如下所示: 我想做的是得到2014年每个季度的平均值和标准差。理想输出如下: 在我的脚本中,我已经通过这样做创建了季度信息。 但是,有一件事我不明白: 如果我尝试使用此命令执行此操作 brent[brent.index.year == 2014].groupby('quarter').agg({"average_price": np.mean, "std_price&

我有一个关于大熊猫多重聚集的问题

最初我有一个数据集,显示石油价格,细节如下:

数据集的标题如下所示:

我想做的是得到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'))

因此,问题是:

  • 第一种方法有什么问题
  • 为什么我们需要在这里使用第二种方法
提前感谢大家的帮助

第一种方法有什么问题

传递了dict,因此熊猫从键
average\u price
std\u price
中查找列,因为返回错误时数据帧中不存在列

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

brent[brent.index.year == 2014].groupby('quarter')['Price'].agg([('average_price','mean'),('std_price',np.std)])
brent[brent.index.year == 2014].groupby('quarter').agg(average_price=('Price','mean'), 
                                                      std_price=('Price',np.std),
                                                      sumQ=('quarter','sum'))
这是可能的,因为对于一列
Price
可以定义多个列名称

在以后的版本中,将使用:

这里是逻辑-对于每个聚合,都使用聚合列和聚合函数来定义nw列名。因此,可以使用不同的函数聚合多个列:

brent[brent.index.year == 2014].groupby('quarter')['Price'].agg([('average_price','mean'),('std_price',np.std)])
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
std
具有
ddof=1
,因此输出不同