我试图找出如何计算前一个月单位销售变化最大的前5种产品。下面是我的一小部分数据,此处Vendor_SKU和Order_Month都是由pd.groupby创建的索引。
amz = amz.groupby(['Vendor_SKU', 'Order_Month'])['Quantity'].sum()
Vendor_SKU Order_Month
DLEBL140 2018-11-01 17.0
2018-12-01 13.0
DLEBL90 2018-11-01 29.0
2018-12-01 39.0
DLEBR160 2018-11-01 16.0
2018-12-01 17.0
DLEG180 2018-11-01 30.0
2018-12-01 20.0
DLER150 2018-11-01 22.0
2018-12-01 23.0
DLEW110 2018-11-01 49.0
2018-12-01 41.0
DLEY130 2018-11-01 32.0
2018-12-01 20.0
我想要实现的是计算同一产品的所有差异,并找到差异最大的产品。说我期望的结果是:
Vendor_SKU
DLEBL140 -4.0
DLEBL90 10.0
DLEBR160 1.0
DLEG180 -10.0
DLER150 1.0
DLEW110 -8.0
DLEY130 -12.0
有了这个结果,我便可以找出前5个变化。有任何想法吗?谢谢!
由于你们的快速反应,我在发布此问题之前尝试了groupby.diff,但得到了一批NaN,没有任何索引,只是一列NaN,几乎没有随机数。后来我意识到,可能有些产品只能在11月或12月购买,就像下面的前两行一样,然后我没有得到两个月之间的差额,而只用diff()获得了NaN。
Vendor_SKU Order_Month Quantity
0 C142 2018-12-01 2.0
1 CC-18P 2018-11-01 5.0
2 DLEBL140 2018-11-01 17.0
3 DLEBL140 2018-12-01 13.0
4 DLEBL90 2018-11-01 29.0
5 DLEBL90 2018-12-01 39.0
猜我需要插入数量为0的行,然后尝试diff()。
答案 0 :(得分:4)
从groupby
和diff
开始,因为您希望每个供应商的差异最大:
amz.groupby(level=0).diff(1).max(level=0)
Vendor_SKU
DLEBL140 -4.0
DLEBL90 10.0
DLEBR160 1.0
DLEG180 -10.0
DLER150 1.0
DLEW110 -8.0
DLEY130 -12.0
Name: Quantity, dtype: float64
从这里开始,如果要查找前5个差异,可以使用nlargest
:
amz.groupby(level=0).diff(1).max(level=0).nlargest(5)
Vendor_SKU
DLEBL90 10.0
DLEBR160 1.0
DLER150 1.0
DLEBL140 -4.0
DLEW110 -8.0
Name: Quantity, dtype: float64