当列表位于 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/