我正在尝试在销售数据库中评估广告数量是否发生变化。 我正在使用的示例数据框是这样的:
df = pd.DataFrame({"offer-id": [1,1,2,2,3,4,5], "date": ["2024-02-10","2024-02-11","2024-02-10","2024-02-11","2024-02-11","2024-02-11","2024-02-10"], "price": [30,10,30,30,20,25,20]})
看起来像下面这样:
我现在正在尝试获取已售出或新添加的物品数量(我不在乎是哪一件,因为一旦我拥有了一件,另一件就应该很容易计算失败)。
例如在完美的情况下,下一段代码告诉我,2 月 10 日,报价已上线(ID 1、2 和 5),并且已售出(ID 5) 或者,它告诉我 2 月 11 日有 4 个报价上线,其中 2 个是新的(据此,因为我知道前 5 个报价在线,所以我也可以计算出一定有一个已售出)
有没有简单的方法可以做到这一点? 我尝试过类似的事情
df.groupby(['date'])["offer-id"].agg({'nunique'})
但他们缺少“与之前的比较”时间步长组件。
您可以聚合为
set
:
offers = df.groupby('date', sort=True)['offer-id'].agg(set)
date
2024-02-10 {1, 2, 5}
2024-02-11 {1, 2, 3, 4}
Name: offer-id, dtype: object
diff
会给你新的物品:
offers.diff()
date
2024-02-10 NaN
2024-02-11 {3, 4}
Name: offer-id, dtype: object
或已售出的商品:
offers.diff(-1)
date
2024-02-10 {5}
2024-02-11 NaN
Name: offer-id, dtype: object