当前位置:  开发笔记 > 编程语言 > 正文

熊猫:在列表的每个元素上使用groupby

如何解决《熊猫:在列表的每个元素上使用groupby》经验,为你挑选了2个好方法。

也许我错过了显而易见的事实.

我有一个像这样的pandas数据框:

   id        product              categories
    0        Silmarillion         ['Book', 'Fantasy']
    1        Headphones           ['Electronic', 'Material']
    2        Dune                 ['Book', 'Sci-Fi']

我想使用groupby函数来计算类别列中每个元素的出现次数,所以这里的结果将是

Book       2
Fantasy    1
Electronic 1
Material   1
Sci-Fi     1

但是,当我尝试使用groupby函数时,pandas会计算整个列表的出现次数而不是分隔其元素.我已经尝试了多种不同的处理方式,使用元组或拆分,但到目前为止我还没有成功.



1> ayhan..:

您可以通过堆叠它们来规范化记录,然后调用value_counts():

pd.DataFrame(df['categories'].tolist()).stack().value_counts()
Out: 
Book          2
Fantasy       1
Material      1
Sci-Fi        1
Electronic    1
dtype: int64



2> piRSquared..:

您也可以pd.value_counts直接在列表上打电话.
您可以生成相应的列表,经由numpy.concatenate,itertools.chaincytoolz.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)

全部收益

Book          2
Electronic    1
Fantasy       1
Material      1
Sci-Fi        1
dtype: int64

时间测试

在此输入图像描述

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有