首页 > 解决方案 > (排列的)列表的唯一组合

问题描述

考虑以下列表:

data["categories"].value_counts() 我明白了

c          110
b           81
d           80
a           70
c,b         43
          ... 
d,a,b,c      2
a,b,c,d      2
a,b,d        1
a,c,d,b      1
d,c,a,b      1
Name: categories, Length: 62, dtype: int64

我想计算每个组合的唯一实例,但由于排序不同,它算作两个单独的元素,a,b,cc,b,a我想将它们算作相同的元素。

所以我试图先列出它们,然后对它们进行排序

list = data["categories"]
L = []
# getting length of list
length = len(list)

for i in range(len(data["categories"])):
    L.append(sorted(list[i]))

for j in range(len(L)):
    M.append(L[i].remove(','))

这种古老方法的问题在于它会从列表中留下“,”,然后需要手动删除。

然后手动删除','

[',', 'a', 'd']-->['a','d']

有没有更智能的方法来做到这一点?

标签: pythonpandaspermutation

解决方案


尝试这个 -

  1. 拆分 index by 中的每个字符串值,,然后使用 set 重新排序它们。
  2. 加入它们,并覆盖原始索引
  3. 最后,使用pd.Series.groupbyoverlevel=0进行计数总和
s = data["categories"].value_counts()

#d,a,b,c    2
#a,b,c,d    2
#a,b,d      1
#a,c,d,b    1
#d,c,a,b    1
#Name: count, dtype: int64

s.index = [','.join(sorted(set(i.split(',')))) for i in df1.index]
s.groupby(level=0).sum()
a,b,c,d    6
a,b,d      1
Name: count, dtype: int64

推荐阅读