(置换)列表的唯一组合

2024-10-04 17:26:20 发布

您现在位置:Python中文网/ 问答频道 /正文

考虑以下列表:

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条回答
网友
1楼 · 发布于 2024-10-04 17:26:20

试试这个-

  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

相关问题 更多 >

    热门问题