python - 分析数据集的增减

标签 python sql excel max min

我有一个以下形式的数据集:

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 个产品和四个月的数据。我想了解产品集如何随着时间的推移而变化。计算每天的数量显然很容易,可以看到我在 1 月 2 日损失了一件产品,在 1 月 4 日获得了一件产品,但随后我不知道那是什么产品。

有没有更系统的方法来解决这个问题?理想情况下,输出会向我显示日期列表以及当天删除/添加的产品,即:

Date        |   Product   |   Type
2019-01-02  |   456       |   Out
2019-01-03  |   456       |   In
2019-01-04  |   789       |   In

我之前考虑过产品的最小(日期)、最大(日期),但产品可能会重复删除和添加,我不会以这种方式来回捕获它。

可用环境包括 Python、SQL 和 Excel。

谢谢

最佳答案

要生成缺失条目的列表,您可以使用 CROSS JOIN 生成 productdate 的笛卡尔积,然后使用它使用 LEFT JOIN 反模式检测表中的间隙,例如:

SELECT p.product, d.date
FROM 
    (SELECT DISTINCT product FROM mytable) p
    CROSS JOIN (SELECT DISTINCT date from mytable) d
    LEFT JOIN mytable t ON t.product = p.product AND t.date = d.date
WHERE t.product IS NULL

Demo on DB Fiddle:

| product | date       |
| ------- | ---------- |
| 789     | 2019-01-01 |
| 456     | 2019-01-02 |
| 789     | 2019-01-02 |
| 789     | 2019-01-03 |

关于python - 分析数据集的增减,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55542399/

相关文章:

sql - 将Windows上的.sql文件导入到postgresql

sql - SELECT 中的 MSSQL cast( [varcharColumn] to int) 在 WHERE 子句过滤掉错误值之前执行

vba - 无法获取 xlcelltypevisible 范围类的 Specialcells 属性

VBA循环条件在任意行数后停止评估

javascript - Selenium:弹出窗口未显示在窗口句柄中

python - 导入 matplotlib.pyplot 时如何修复 "UnicodeDecodeError: ' ascii' 编解码器无法解码字节 0xe0"?

mysql - 如何在列中执行MySQL智能文本搜索?

regex - VBA 6 : regex not recognizing complicated string

python - which 和 type 在 vi​​rtualenv 中显示 IPython 可执行文件的不同路径,在 IPython 中导入失败,在标准解释器中导入成功?

python - 增加特定行的列中的整数值