查找由Pandas中的列表元素组成的系列模式

时间:2018-04-10 21:01:43

标签: python list pandas dataframe series

我正在使用pd.Series,其中每个条目都是一个列表。我想找到该系列的模式,即本系列中最常见的列表。我尝试过同时使用pandas.Series.value_countspandas.Series.mode。但是,这两种方法都会引发以下异常:

  

TypeError:不可用类型:' list'

以下是此类系列的一个简单示例:

pd.Series([[1,2,3], [4,5,6], [1,2,3]])

我正在寻找一个将返回[1,2,3]的函数。

2 个答案:

答案 0 :(得分:5)

您需要转换为tuple,然后使用mode

pd.Series([[1,2,3], [4,5,6], [1,2,3]]).apply(tuple).mode().apply(list)
Out[192]: 
0    [1, 2, 3]
dtype: object

略有改进:

list(pd.Series([[1,2,3], [4,5,6], [1,2,3]]).apply(tuple).mode().iloc[0])
Out[210]: [1, 2, 3]

因为两个申请是丑陋的

s=pd.Series([[1,2,3], [4,5,6], [1,2,3]])
s[s.astype(str)==s.astype(str).mode()[0]].iloc[0]
Out[205]: [1, 2, 3]

答案 1 :(得分:3)

列表不可删除,因此您需要将Series listSeries转换为tupleCounter

执行此操作后,您可以快速使用Counter.most_common 生成多组元组,然后使用{{1}提取最常见的元素(AKA,mode)。

s = pd.Series([[1,2,3], [4,5,6], [1,2,3]])

from collections import Counter  

c = Counter(tuple(l) for l in s)
list(c.most_common(1)[0][0])
[1, 2, 3]