Python 我怎样才能找到频率?

Python 我怎样才能找到频率?,python,pandas,numpy,frequency,Python,Pandas,Numpy,Frequency,我有这个数据框。如何找到b列中重复次数最多的3个数字 import pandas as pd import numpy as np df = pd.DataFrame({"a": [1,2,2,4,2,3], "b": [np.nan, np.nan, '2,3', 3, '3,5,1',2]}) 我猜答案应该是3,2,5或3,2,1拆分分隔符周围的列b,,然后使用分解将列表中的每个元素转换为行,最后使用值计数+头获得前3个重复元素: df['b'].d

我有这个数据框。如何找到b列中重复次数最多的3个数字

import pandas as pd
import numpy as np
df = pd.DataFrame({"a": [1,2,2,4,2,3], "b": [np.nan, np.nan, '2,3', 3, '3,5,1',2]})

我猜答案应该是3,2,5或3,2,1

拆分
分隔符周围的列
b
,,然后使用
分解
将列表中的每个元素转换为行,最后使用
值计数
+
获得前3个重复元素:

df['b'].dropna().astype(str).str.split(',')\
       .explode().value_counts().head(3).index.tolist()
pandas版本中提供了explode=
0.25
,对于pandas版本<
0.25
,请使用:

pd.value_counts(np.hstack(df['b'].dropna().astype(str).str.split(','))).head(3).index.tolist()


使用pandas和python的组合
集合。计数器

from collections import Counter

a = list(dict(Counter(df.b.dropna().astype(str).str.split(',').sum()).most_common(3))
                                   .keys())

In [132]: a
Out[132]: ['3', '2', '5']

如果np.nan是最常见的,你想把它包括在内吗?哦,对不起,我应该先删除它们=Kenneth=====我收到了这个错误,AttributeError:“Series”对象没有属性“explode”。我想您使用的是旧的pandas版本,是否可以升级pandas?是的,您是对的。我在使用云系统,所以。。。它在我的个人电脑上工作
from collections import Counter

a = list(dict(Counter(df.b.dropna().astype(str).str.split(',').sum()).most_common(3))
                                   .keys())

In [132]: a
Out[132]: ['3', '2', '5']