如何获得所有分组中存在的唯一值组合

问题描述 投票:0回答:1

我想知道产品现有的 uom 值组合是什么。 给定

df = pd.DataFrame([{'prod_id':3,'uom':'PK'},{'prod_id':3,'uom':'PQT'},{'prod_id':4,'uom':'PK'},{'prod_id':5,'uom':'PQT'},{'prod_id':5,'uom':'PK'},{'prod_id':6,'uom':'SET'},{'prod_id':6,'uom':'ENS'},{'prod_id':7,'uom':'PK'},{'prod_id':7,'uom':'ENS'}])

我想要:

  • [PK、PQT]
  • [PK]
  • [设置,ENS]
  • [PK、ENS]
  • [PQT,PK]

理想情况下,顺序不重要,因此 [PK, PQT] 和 [PQT, PK] 是等效的。

我能够通过 groupby 和 unique 轻松获得每个产品所具有的值的组合。

df.groupby(by='prod_id')['uom'].unique()

但是如果我尝试将 unique() 应用于该结果

df.groupby(by='prod_id')['uom'].unique().unique()

我得到: 类型错误:不可散列的类型:'numpy.ndarray'

python pandas group-by unique
1个回答
0
投票

您可以使用自定义函数进行聚合,例如

set
,它给出唯一的值

combinations = df.groupby('prod_id').agg({'uom': set}).squeeze().to_dict()
print(combinations)
>>> {3: {'PQT', 'PK'}, 4: {'PK'}, 5: {'PQT', 'PK'}, 6: {'ENS', 'SET'}, 7: {'ENS', 'PK'}}

这给出了集合字典

{prod_id: set of unique values}
,集合与元素的顺序无关(与列表不同)。如果您只想要集合(没有组),您可以在末尾使用
.to_list()
而不是
.to_dict()

© www.soinside.com 2019 - 2024. All rights reserved.