在组内获得最大差异

JT *_*ong 5 python group-by dataframe pandas pandas-groupby

我正在试图弄清楚如何计算前一个月单位销售额变化最大的前五大产品.下面是我的一小部分数据,这里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
Run Code Online (Sandbox Code Playgroud)

我想要实现的是计算同一产品的所有差异,找到差异最大的产品.说我期待的结果就像:

                  Vendor_SKU  
                  DLEBL140      -4.0
                  DLEBL90       10.0
                  DLEBR160       1.0     
                  DLEG180      -10.0
                  DLER150        1.0
                  DLEW110       -8.0           
                  DLEY130      -12.0
Run Code Online (Sandbox Code Playgroud)

通过这个结果,我可以找出前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
Run Code Online (Sandbox Code Playgroud)

猜猜我需要插入数量为0的行,然后尝试diff().

cs9*_*s95 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
Run Code Online (Sandbox Code Playgroud)

从这里开始,如果您想找到前 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
Run Code Online (Sandbox Code Playgroud)