Python 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

我目前正在写我的论文,在我想做的groupby函数中遇到了一些问题。我试图找出某人的总购买金额、平均购买金额、购买数量、总共购买了多少产品以及每个产品的平均价值

数据如下所示:

    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
是一个包含多个元素的列表时,聚合可以正常工作,但会出现相同的错误“嵌套字典在聚合中不明确”(pandas
0.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
是一个包含多个元素的列表时,聚合可以正常工作,但会出现相同的错误“嵌套字典在聚合中不明确”(pandas
0.22.0
)。请注意,pandas的最新版本是1.2.4,其中不再接受上述语法。相反,使用
df.groupby('id')[vars].agg([“count”,“mean”])
,即使
vars
有一个元素(在
0.22.0
上也是如此),事情也可以正常进行。