pandas python 中重命名多个聚合结果列的问题
Issue in renaming the multiple aggregation outcome columns in pandas python
我对 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'))
所以问题是:
- 这里的第一种方法有什么问题?
- 为什么我们需要在这里使用第二种方法?
提前感谢大家的帮助!
What's wrong with the first approach here?
有传递的字典,所以pandas从键average_price
、std_price
寻找列,因为如果return错误,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 std
有 ddof=1
,所以不同的输出。
我对 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'))
所以问题是:
- 这里的第一种方法有什么问题?
- 为什么我们需要在这里使用第二种方法?
提前感谢大家的帮助!
What's wrong with the first approach here?
有传递的字典,所以pandas从键average_price
、std_price
寻找列,因为如果return错误,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 std
有 ddof=1
,所以不同的输出。