如何解决Python:如何找到最常见的元素组合?
一台机器提供在熊猫数据框中提供的故障代码。 id
标识机器,code
是故障代码:
df = pd.DataFrame({
"id": [1,1,2,3,4],"code": [1,5,8,9,6,4,7],})
阅读示例:机器1生成5个代码:1、2、5、8和9。
我想找出所有机器上最常见的代码组合。该示例的结果将类似于[2]
(3x),[2,5]
(3x),[3,5]
(2x)等。
我该如何实现?由于数据很多,我正在寻找一种有效的解决方案。
还有另外两种方式表示数据(以防使计算更容易):
pd.crosstab(df.id,df.code)
df.groupby("id")["code"].apply(list)
解决方法
使用自定义函数all_subsets
,然后将值展平Series.explode
,最后使用Series.value_counts
:
from itertools import chain,combinations
#https://stackoverflow.com/a/5898031
#only converted to list and removed empty tuples by range(1,...
def all_subsets(ss):
return list(chain(*map(lambda x: combinations(ss,x),range(1,len(ss)+1))))
s = df.groupby('id')['code'].apply(all_subsets).explode().value_counts()
print (s)
(2,) 3
(2,5) 3
(5,) 3
(1,2) 2
(3,6) 2
..
(1,5,8) 1
(9,) 1
(1,3,4,6) 1
(5,8,9) 1
(4,6) 1
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。