Python groupby嵌套字典在聚合中不明确
我目前正在写我的论文,在我想做的groupby函数中遇到了一些问题。我试图找出某人的总购买金额、平均购买金额、购买数量、总共购买了多少产品以及每个产品的平均价值 数据如下所示:Python groupby嵌套字典在聚合中不明确,python,pandas,group-by,aggregation,Python,Pandas,Group By,Aggregation,我目前正在写我的论文,在我想做的groupby函数中遇到了一些问题。我试图找出某人的总购买金额、平均购买金额、购买数量、总共购买了多少产品以及每个产品的平均价值 数据如下所示: id purchase_amount price_products #_products 0 123 30 20.00 2 2 123 NaN 10.00 NaN 3 124 50.00
id purchase_amount price_products #_products
0 123 30 20.00 2
2 123 NaN 10.00 NaN
3 124 50.00 25.00 3
4 124 NaN 15.00 NaN
5 124 NaN 10.00 NaN
我的代码如下所示:
df.groupby('id')[['purchase_amount','price_products','#_products']].agg(total_purchase_amount=('purchase_amount','sum'),average_purchase_amount=('purchase_amount','mean'),times_purchased=('#_products','count'),total_amount_products_purchased=('price_products','count'),average_value_products=('price_products','mean'))
但我得到了以下错误:
SpecificationError:嵌套字典在聚合中不明确
我似乎找不到我做错了什么,希望有人能帮助我 所有计算都要这样做
df.groupby('id')['purchase_amount'].agg({'total_purchase_amount':'sum'})
所有计算都要这样做
df.groupby('id')['purchase_amount'].agg({'total_purchase_amount':'sum'})
由于有多个变量要聚合,我建议使用以下聚合形式:
df.groupby('id')[].agg([])
例如:
df_agg=df.groupby('id')[“购买金额”、“价格产品”、“价格产品”]].agg([“计数”、“平均值”、“总和”)
这将创建一个列式多级输出数据帧df_agg
,如下所示:
purchase_amount price_products #_products
count mean sum count mean sum count mean sum
id
123 1 30.0 30.0 2 15 30 1 2.0 2.0
124 1 50.0 50.0 3 17 51 1 3.0 3.0
然后,您可以使用多索引引用输出数据框中的特定条目,如下所示:
df_agg['purchase_amount']['mean']
id
123 30.0
124 50.0
Name: mean, dtype: float64
或者,如果需要,例如所有方法,请使用横截面法xs()
:
df_agg.xs('mean',轴=1,层=1)
注意:上面的代码可能会使Python计算出比需要更多的统计信息,就像您的示例中的情况一样。但在某些情况下,这可能不是问题,它的优点是代码较短,可归纳为任何集合和数量的(数字和浮点)变量进行聚合。由于您有多个变量要聚合,我建议使用以下聚合形式:
df.groupby('id')[].agg([])
例如:
df_agg=df.groupby('id')[“购买金额”、“价格产品”、“价格产品”]].agg([“计数”、“平均值”、“总和”)
这将创建一个列式多级输出数据帧df_agg
,如下所示:
purchase_amount price_products #_products
count mean sum count mean sum count mean sum
id
123 1 30.0 30.0 2 15 30 1 2.0 2.0
124 1 50.0 50.0 3 17 51 1 3.0 3.0
然后,您可以使用多索引引用输出数据框中的特定条目,如下所示:
df_agg['purchase_amount']['mean']
id
123 30.0
124 50.0
Name: mean, dtype: float64
或者,如果需要,例如所有方法,请使用横截面法xs()
:
df_agg.xs('mean',轴=1,层=1)
注意:上面的代码可能会使Python计算出比需要更多的统计信息,就像您的示例中的情况一样。但在某些情况下,这可能不是问题,它的优点是代码较短,可归纳为任何集合和数量的(数字和浮点)变量进行聚合。我可以工作
pandas==1.0.0
,您使用的pandas版本是什么?谢谢您的尝试。我的pandas版本是0.25.1,在版本'0.25.1'
中可以正常工作。这与我在运行例如df.groupby('id')[vars]时发生的错误相同。agg({'n':“count”,'mean':“mean”})
只要vars
是一个只有一个元素的变量名列表。也就是说,当vars
是一个包含多个元素的列表时,聚合可以正常工作,但会出现相同的错误“嵌套字典在聚合中不明确”(pandas0.22.0
)。请注意,pandas的最新版本是1.2.4,其中不再接受上述语法。相反,使用df.groupby('id')[vars].agg([“count”,“mean”])
,即使vars
有一个元素(在0.22.0
上也是如此),也可以正常工作。对于我来说pandas==1.0.0
,您使用的pandas版本是什么?谢谢您的尝试。我的pandas版本是0.25.1,在版本'0.25.1'
中可以正常工作。这与我在运行例如df.groupby('id')[vars]时发生的错误相同。agg({'n':“count”,'mean':“mean”})
只要vars
是一个只有一个元素的变量名列表。也就是说,当vars
是一个包含多个元素的列表时,聚合可以正常工作,但会出现相同的错误“嵌套字典在聚合中不明确”(pandas0.22.0
)。请注意,pandas的最新版本是1.2.4,其中不再接受上述语法。相反,使用df.groupby('id')[vars].agg([“count”,“mean”])
,即使vars
有一个元素(在0.22.0
上也是如此),事情也可以正常进行。