这是我提出的问题的后续问题:Returning semi-unique values from a list。简而言之,我想转一下这个清单:
['a','b,'a']
到
#Paraphrased answer from Psidom
from itertools import groupby
lst = ['a','a','a','b','b','b','a','a','a']
[k for k, _ in groupby(lst)]
# ['a', 'b', 'a'] #call this TRANSFORM
用户Psidom的回答通过以下方式起到了作用:
[3,3,3]
我的最终目标是创建一个pd.DataFrame,其行=(TRANSFORM中的元素数)和两列:label和frequency。我的麻烦是从原始列表中获取每个“半唯一”值的频率计数,这应该是:
{{1}}
提前谢谢你,
路
答案 0 :(得分:2)
groupby
documentation有这个示例输出:
# [k for k, g in groupby('AAAABBBCCDAABBB')] --> A B C D A B
# [list(g) for k, g in groupby('AAAABBBCCD')] --> AAAA BBB CC D
所以,我认为你需要:
[(k, len(list(v))) for k, v in groupby(lst)]
哪个会给你元素和频率:
[('a', 3), ('b', 3), ('a', 3)]