计算2D列表中的字符串频率

时间:2019-11-16 00:44:48

标签: python pandas

比方说,我有一个类似的数据:

x = [['stack', 'over', 'flow'], ['stack', 'stack', 'flow']]

我如何拥有一个对每个字符串进行计数的pd数据帧,使得输出如下所示:

       count
stack   3
over    1
flow    2

谢谢。

2 个答案:

答案 0 :(得分:2)

使用pandas.Series.explode(可从pandas> = 0.25获得):

import pandas as pd

pd.Series(x, name='count').explode().value_counts()

输出:

stack    3
flow     2
over     1

如果使用较低版本的pandas,请将collections.Counteritertools.chain一起使用:

from collections import Counter
from itertools import chain

pd.Series(Counter(chain(*x)), name='count')

输出:

stack    3
over     1
flow     2

注意:Counter方法似乎快6倍

%timeit pd.Series(Counter(chain(*x)), name='count')
# 151 µs ± 3.97 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

%timeit pd.Series(x, name='count').explode().value_counts()
# 755 µs ± 11.2 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

答案 1 :(得分:2)

我会做

pd.DataFrame(x).stack().value_counts().to_frame('count')
Out[10]: 
       count
stack      3
flow       2
over       1