【问题标题】:Get largest difference within a group获得组内最大的差异
【发布时间】:2019-06-12 04:13:42
【问题描述】:

我试图弄清楚如何计算与上个月相比单位销售额变化最大的前 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()。

【问题讨论】:

  • 只是猜测:amz.groupby(['Vendor_SKU', 'Order_Month'])['Quantity'].diff()
  • 不会是amz.groupby(['Vendor_SKU'])['Quantity'].diff()(如果你重置索引)?
  • 如果回答有帮助,别忘了accept。谢谢。

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


【解决方案1】:

从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

【讨论】:

    猜你喜欢
    • 2023-01-28
    • 1970-01-01
    • 2019-04-08
    • 2017-03-04
    • 2021-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多