python – 获得组内最大的差异

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

解决方法:

从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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐