在小组中获得最大的差异

时间:2019-01-17 21:48:32

标签: python pandas dataframe group-by pandas-groupby

我试图找出如何计算前一个月单位销售变化最大的前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()。

1 个答案:

答案 0 :(得分:4)

groupbydiff开始,因为您希望每个供应商的差异最大:

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