也许我错过了显而易见的事情。
我有一个像这样的pandas数据框:
id product categories
0 Silmarillion ['Book', 'Fantasy']
1 Headphones ['Electronic', 'Material']
2 Dune ['Book', 'Sci-Fi']
我想使用groupby函数来计算categories列中每个元素的出现次数,所以这里的结果将是
Book 2
Fantasy 1
Electronic 1
Material 1
Sci-Fi 1
但是,当我尝试使用groupby函数时,pandas会计算整个列表的出现次数而不是分隔其元素。我尝试过多种不同的处理方法,使用元组或拆分,但到目前为止我还没有成功。
答案 0 :(得分:5)
您可以通过堆叠记录来规范化记录,然后调用value_counts()
:
pd.DataFrame(df['categories'].tolist()).stack().value_counts()
Out:
Book 2
Fantasy 1
Material 1
Sci-Fi 1
Electronic 1
dtype: int64
答案 1 :(得分:5)
您也可以直接在列表中拨打the requested URL /working.php was not found on this server.
您可以通过pd.value_counts
,numpy.concatenate
或itertools.chain
cytoolz.concat
from cytoolz import concat
from itertools import chain
cytoolz.concat
pd.value_counts(list(concat(df.categories.values.tolist())))
itertools.chain
pd.value_counts(list(chain(*df.categories.values.tolist())))
+ numpy.unique
numpy.concatenate
所有收益
u, c = np.unique(np.concatenate(df.categories.values), return_counts=True)
pd.Series(c, u)
时间测试
答案 2 :(得分:4)
试试这个:
In [58]: df['categories'].apply(pd.Series).stack().value_counts()
Out[58]:
Book 2
Fantasy 1
Electronic 1
Sci-Fi 1
Material 1
dtype: int64