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,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']
有没有更智能的方法来做到这一点?
解决方案
尝试这个 -
- 拆分 index by 中的每个字符串值,
,
然后使用 set 重新排序它们。 - 加入它们
,
并覆盖原始索引 - 最后,使用
pd.Series.groupby
overlevel=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
推荐阅读
- javascript - 浏览器如何打开桌面应用程序?
- sql - 仅基于范围最小值的查找值
- cmake - CMake BISON_TARGET 防止生成标头
- sql - 如何使用新的 plpgsql 查看可用于访问的属性
- avro - Avro 工具失败预期启动联合。收到 VALUE_STRING
- python - 在同一行中删除特定单词及其后面的所有字符,并使用python从文本文件中删除下一行
- java - Java中是否有等效于T-SQL的 HASHBYTES('SHA1', VARBINARY(MAX)) ?
- mysql - MySQL查询 - 派生表与左连接在哪里
- manatee.json - 验证失败但缺少错误消息
- oracle - Oracle dbms_job 在 5 秒内执行具有不同延迟的作业。如何让它以指定的时间间隔无延迟地运行作业?