gpt4 book ai didi

python - 如何根据其他/上一个 groupby 的结果运行 groupby?

转载 作者:太空宇宙 更新时间:2023-11-04 00:05:02 26 4
gpt4 key购买 nike

假设您要在全局范围内销售产品,并且希望在某个主要城市的某个地方设立销售办事处。您的决定将完全基于销售数字。

这将是您的(简化的)销售数据:

df={
'Product':'Chair',
'Country': ['USA','USA', 'China','China','China','China','India',
'India','India','India','India','India', 'India'],
'Region': ['USA_West','USA_East', 'China_West','China_East','China_South','China_South', 'India_North','India_North', 'India_North','India_West','India_West','India_East','India_South'],
'City': ['A','B', 'C','D','E', 'F', 'G','H','I', 'J','K', 'L', 'M'],
'Sales':[1000,1000, 1200,200,200, 200,500 ,350,350,100,700,50,50]
}

dff=pd.DataFrame.from_dict(df)

dff

根据数据,您应该前往城市“G”。

逻辑应该是这样的:

1) 查找具有 Max(sales) 的国家/地区

2) 在那个国家,找到 Max(sales) 的区域

3) 在该地区,找到具有 Max(sales) 的城市

我试过:groupby('Product', 'City').apply(lambda x: x.nlargest(1)),但这不起作用,因为它会建议城市“C”。这是全局销售额最高的城市,但中国不是销售额最高的国家。

我可能必须经历几个 groupby 循环。根据结果​​,对原始dataframe进行过滤,并在下一层再次进行groupby。

更复杂的是,您还销售其他产品(不仅是“椅子”,还包括其他家具)。您必须将每次迭代的结果(例如每个产品具有 Max(sales) 的国家/地区)存储在某个地方,然后在 groupby 的下一次迭代中使用它。

你有什么想法,我如何在 pandas/python 中实现它?

最佳答案

想法是每个级别的聚合sum Series.idxmax对于 top1 值,用于过滤下一级的值 boolean indexing :

max_country = dff.groupby('Country')['Sales'].sum().idxmax()
max_region = dff[dff['Country'] == max_country].groupby('Region')['Sales'].sum().idxmax()
max_city = dff[dff['Region'] == max_region].groupby('City')['Sales'].sum().idxmax()
print (max_city)
G

关于python - 如何根据其他/上一个 groupby 的结果运行 groupby?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54441318/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com