比方说,我有一个类似的数据:
x = [['stack', 'over', 'flow'], ['stack', 'stack', 'flow']]
我如何拥有一个对每个字符串进行计数的pd数据帧,使得输出如下所示:
count
stack 3
over 1
flow 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.Counter
与itertools.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