(排列)列表的唯一组合
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,c
与 c,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']
有没有更智能的方法?
试试这个 -
- 按
,
拆分索引中的每个字符串值,然后使用 set 对它们重新排序。
- 用
,
加入它们并覆盖原来的索引
- 最后,使用
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
考虑以下列表:
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,c
与 c,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']
有没有更智能的方法?
试试这个 -
- 按
,
拆分索引中的每个字符串值,然后使用 set 对它们重新排序。 - 用
,
加入它们并覆盖原来的索引 - 最后,使用
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