gpt4 book ai didi

python - 存在缺失值时对所有可能的组进行自定义分组

转载 作者:太空宇宙 更新时间:2023-11-03 21:08:31 26 4
gpt4 key购买 nike

我有一本代表一组产品的字典。我需要找到这些产品中的所有重复产品。如果产品具有相同的 product_typecolorsize -> 它们是重复的。如果我没有遇到问题:缺少某些值,我可以轻松地按 ('product_type','color','size') 进行分组。现在我必须找到所有可能相互重复的产品组。 这意味着某些元素可以出现在多个组中。

让我举例说明:

import pandas as pd


def main():
data= {'product_id': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],
'product_type': ['shirt', 'shirt', 'shirt', 'shirt', 'shirt', 'hat', 'hat', 'hat', 'hat', 'hat', 'hat', ],
'color': [None, None, None, 'red', 'blue', None, 'blue', 'blue', 'blue', 'red', 'red', ],
'size': [None, 's', 'xl', None, None, 's', None, 's', 'xl', None, 'xl', ],
}
print(data)

if __name__ == '__main__':
main()

对于此数据:

enter image description here

我需要这个结果 - 每个可能组的可能重复产品的列表(仅取最大的 super 组):

![enter image description here

例如,让我们以 id=1 为例“衬衫”该产品没有颜色或尺码,因此他可以与衬衫#2(尺寸为“s”但没有颜色)和衬衫#4(颜色为“红色”,但没有颜色)一起出现在可能的“重复组”中没有尺寸)。因此,这三件衬衫 (1,2,4) 可能是具有相同颜色“红色”和尺码“s”的重复品。

我尝试通过循环遍历缺失值的所有可能组合来实现它,但感觉错误且复杂。

有没有办法得到想要的结果?

最佳答案

您可以创建所有非 None 的可能键,然后检查哪个项目属于哪个键 - 尊重 None:

data= {'product_id'  : [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],
'product_type': ['shirt', 'shirt', 'shirt', 'shirt', 'shirt', 'hat',
'hat', 'hat', 'hat', 'hat', 'hat', ],
'color' : [None, None, None, 'red', 'blue', None, 'blue',
'blue', 'blue', 'red', 'red', ],
'size' : [None, 's', 'xl', None, None, 's', None, 's', 'xl', None, 'xl', ]}



from itertools import product

# create all keys without None in it
p = product((t for t in set(data['product_type']) if t),
(c for c in set(data['color']) if c),
(s for s in set(data['size']) if s))

# create the things you have in stock
inventar = list( zip(data['product_id'],data['product_type'],data['color'],data['size']))
d = {}

# order things into its categories
for cat in p:
d.setdefault(cat,set()) # uses a set to collect the IDs
for item in inventar:
TY, CO, SI = cat
ID, TYPE, COLOR, SIZE = item

# the (TYPE or TY) will substitute TY for any TYPE that is None etc.
if (TYPE or TY)==TY and (COLOR or CO)==CO and (SIZE or SI)==SI:
d[cat].add(ID)

print(d)

输出:

# category-key            id's that match
{('shirt', 'blue', 's') : {1, 2, 5},
('shirt', 'blue', 'xl'): {1, 3, 5},
('shirt', 'red', 's') : {1, 2, 4},
('shirt', 'red', 'xl') : {1, 3, 4},
('hat', 'blue', 's') : {8, 6, 7},
('hat', 'blue', 'xl') : {9, 7},
('hat', 'red', 's') : {10, 6},
('hat', 'red', 'xl') : {10, 11}}

多库:

关于python - 存在缺失值时对所有可能的组进行自定义分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55236331/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com