从交易数据中返回每个季度销售额最高的产品



我有一个数据帧,如下所示。

df_sample=pd.DataFrame({'ID':['ID1','ID2','ID2','ID2','ID1','ID2','ID1','ID1'],
"quarter":['2016Q1','2016Q1','2016Q1','2017Q1','2017Q1','2018Q1','2018Q2','2018Q3'],
"product":['productA','productB','productA','productD','productA','productA','productD','ProductA'],
"sales":[100,200,100,400,100,500,400,100]})

我想根据每个ID的累计销售金额获得顶级产品。即,对于2018Q1季度的ID1,我想获得所有数据的每个产品的销售总额<2018Q1,并返回每个ID的产品名称。提前谢谢。

预期输出:

pd.DataFrame({'ID':['ID1','ID1','ID1','ID1',   'ID2','ID2','ID2'],
"quarter":['2016Q1','2017Q1','2018Q2','2018Q3','2016Q1','2017Q1','2018Q1'],
"product":['productA','productA','productD','productD','productB','ProductD','productA']})

IIUC,您可以使用双groupby:

(df_sample
.groupby(['ID', 'quarter', 'product'])['sales'].sum()
.unstack('product', fill_value=0)
.groupby('ID').cumsum()
.idxmax(1)
)

输出:

ID   quarter
ID1  2016Q1     productA
2017Q1     productA
2018Q2     productD
2018Q3     productD
ID2  2016Q1     productB
2017Q1     productD
2018Q1     productA
dtype: object

最新更新