我有如下形式的数据集:
Product | Date
123 | 2019-01-01
456 | 2019-01-01
123 | 2019-01-02
123 | 2019-01-03
456 | 2019-01-03
123 | 2019-01-04
456 | 2019-01-04
789 | 2019-01-04这只是一个简化的版本。整套产品约有300个产品和4个月的数据。我想了解产品集如何随着时间的推移而变化。很明显,每天计算计数很容易,因为我在1月2日失去了一个产品,在1月4日得到了一个产品,但是我不知道它是什么产品。
有没有一种更系统的方法来解决这个问题?理想情况下,输出会给我显示一个天数列表,以及那天哪些产品退出/添加了哪些产品。我想到了min(日期),最大值(日期)副产品之前,但产品可以下降和添加反复,我不会捕捉这个来回的方式。
可用的环境是Python、SQL和Excel。
发布于 2020-03-31 01:57:45
此响应基于您的域。例如,为了销售,一种产品可能不会每天销售,因此不会有任何记录。
根据您的数据集中每天都会看到产品出现在您的数据集中的数据集,您可以考虑以下方法。
数学上:
A = the set of all possibilities (i.e. product occurrence for each date - you could generate this and use )
B = sample data set provided would be provided
C = A - B
= days that a product was missing.
DPART1 = You could then continue by retrieving the min(date) and max(date) for each product in the dataset to represent the introduction of the new product and possible cease of an existing product.
D= You could then filter the dataset (C) to remove dates less than the min(date) and greater than the maxdate).
In terms of sql:
A - Cartesion/Cross product of all your products and dates
B = Your current sample data set
C = SELECT * FROM A MINUS SELECT * FROM B
DPART1 = SELECT PRODUCT, MIN(date) as INTRODUCED_DATE, MAX(date) as CEASED_DATE from YourSampleDataSET GROUP BY PRODUCT
D = SELECT C.PRODUCT, C.Date FROM C LEFT JOIN DPART1 ON C.PRODUCT = DPART1.PRODUCT
WHERE DPART1.PRODUCT IS NULL OR (
C.Date BETWEEN DPART1.INTRODUCED_DATE AND DPART1.CEASED_DATE
) 注:DPART1.PRODUCT IS NULL确保您不会过滤可能不在样本子集中的产品。
操作注意事项,我建议您的数据库中的索引来帮助查询,在可能的情况下进行分区。
https://datascience.stackexchange.com/questions/48706
复制相似问题