【问题标题】:Check rows within a nested partition have the same values检查嵌套分区中的行是否具有相同的值
【发布时间】:2018-02-21 10:02:12
【问题描述】:

我有一个有两个 ID 的表,我需要检查对于特定的 ID1 和 ID2,所有产品都相同且产品数量相同。

例如在下表中,我有 10001,其中有 123 和 234,并且缺少一行,即 123 有产品 2,并且

对于 20002,345 和 456 都有产品 3 和 4,但最后一个产品有所不同。我需要在我的数据中找到这样的案例。

ID1     ID2     Product
10001   123     Product 1
10001   234     Product 1
10001   234     Product 2
20002   345     Product 3
20002   345     Product 4
20002   345     Product 5
20002   456     Product 3
20002   456     Product 4
20002   456     Product 6

完美的场景将是正确的。

ID1     ID2     Product
10001   123     Product 1
10001   123     Product 2
10001   234     Product 1
10001   234     Product 2
20002   345     Product 3
20002   345     Product 4
20002   345     Product 5
20002   456     Product 3
20002   456     Product 4
20002   456     Product 5

基本上我需要在我的数据中找到所有案例,其中在特定 ID1 中,所有 ID2 都没有一致的产品,一致的产品是指所有 ID2 在 ID1 中应该有相同的产品。

关于在第一个表中查找案例的方法有什么建议吗?谢谢!

【问题讨论】:

    标签: python sql tableau-api


    【解决方案1】:

    假设您已将数据加载到字典中,并且产品列表是一个集合(顺便说一下,这将帮助您确保产品不会因 id1、id2 重复):

    data = {
        10001: {
            123: set([1]),
            234: set([1,2])
        },
        20002: {
            345: set([3,4,6]),
            456: set([3,4,6])
        }
    }
    

    然后您可以通过在集合上使用“^”运算符来检查 id2 的两个值是否具有相同的项目。检查https://docs.python.org/3/library/stdtypes.html#set。例如:

    a = data[10001][123]
    b = data[10001][234]
    c = a ^ b # len(c) will be >0 !!
    

    '^' 计算两个集合之间的对称差,因此当且仅当两个集合相等时它才会返回空集合。

    因此,您可以遍历给定 id1 的所有 id2 键,并在它的 '^' 和前一个没有零 len 的情况下用一条消息中断。示例:

    for id1 in data:
        last_seen = None
        for id2 in data[id1]:
            actual = data[id1][id2]
            if last_seen != None and len(last_seen ^ actual) != 0:
                    print('Items for id1 {} are not equal'.format(id1))
                    break
            last_seen = actual
    

    这是假设您的 csv 文件没有必要排序,因此您需要将其加载到字典中...如果您的文件按 id 排序,那么您可以读取文件并立即完成工作,当然,我'相信你可以适应这个。

    【讨论】:

      猜你喜欢
      • 2021-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-03
      • 1970-01-01
      • 2021-03-31
      • 1970-01-01
      • 2021-03-24
      相关资源
      最近更新 更多