2024-10-01 07:38:31 发布
网友
当列表位于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
我可以将列表扩展成行,然后按执行分组,但这些数据可能很大(超过一百万条记录),我想知道是否有更高效/直接的方法。
谢谢
首先lists的flatten值,然后按^{}或^{}或Counter计数:
list
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
您也可以使用这样的单行:
df = pd.Series(sum([item for item in din.x], [])).value_counts()
首先} 或^{} 或
list
s的flatten值,然后按^{Counter
计数:或:
或:
您也可以使用这样的单行:
相关问题 更多 >
编程相关推荐