熊猫数据框中列表中的元素计数

新手上路,请多包涵

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

在数据中:

 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

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

谢谢

原文由 Gaurav Taneja 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 296
2 个回答

First flatten values of list s and then count by value_counts or size or Counter :

 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

原文由 jezrael 发布,翻译遵循 CC BY-SA 3.0 许可协议

你也可以有这样的一个班轮:

 df = pd.Series(sum([item for item in din.x], [])).value_counts()

原文由 tmsss 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题