python - Pandas 数据框中列表中的元素计数

标签 python pandas

当列表位于 pandas 数据框列中时,我需要获取列表中每个元素的频率

在数据中:

din=pd.DataFrame({'x':[['a','b','c'],['a','e','d', 'c']]})`

              x
0     [a, b, c]
1  [a, e, d, c]

期望的输出:

   f  x
0  2  a
1  1  b
2  2  c
3  1  d
4  1  e

我可以将列表扩展成行,然后执行分组依据,但此数据可能很大(超过百万条记录)并且想知道是否有更有效/直接的方法。

谢谢

最佳答案

第一个flatten list 的值,然后按 value_counts 计数或 size计数器:

a = pd.Series([item for sublist in din.x for item in sublist])

或者:

a = pd.Series(np.concatenate(din.x))

df = a.value_counts().sort_index().rename_axis('x').reset_index(name='f')

或者:

df = a.groupby(a).size().rename_axis('x').reset_index(name='f')

from collections import Counter
from  itertools import chain

df = pd.Series(Counter(chain(*din.x))).sort_index().rename_axis('x').reset_index(name='f')

print (df)
   x  f
0  a  2
1  b  1
2  c  2
3  d  1
4  e  1

关于python - Pandas 数据框中列表中的元素计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48707117/

相关文章:

python - Colab 以 ^C 结束

python - Pandas Dataframe 分为几周

python - 绘制 Pandas 数据时如何禁用标签?

python - 使用 inferred_freq 设置 pandas.tseries.index.DatetimeIndex.freq

python - scrapy 不通过 POST 请求发送 Cookie

python - 将字典存储在数据库中

python - 从原始文件外部的类导入函数

python - Django 未能为 python-ldap 构建wheel

python - 使用按列值拆分的 2 个系列创建线图

python - Pandas groupby、loc、forloop 和条件语句