(排列)列表的唯一组合

Unique combinations of (permuted) list

考虑以下列表:

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']

有没有更智能的方法?

试试这个 -

  1. , 拆分索引中的每个字符串值,然后使用 set 对它们重新排序。
  2. ,加入它们并覆盖原来的索引
  3. 最后,使用 pd.Series.groupby 而不是 level=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