我正在使用pd.Series
,其中每个条目都是一个列表。我想找到该系列的模式,即本系列中最常见的列表。我尝试过同时使用pandas.Series.value_counts
和pandas.Series.mode
。但是,这两种方法都会引发以下异常:
TypeError:不可用类型:' list'
以下是此类系列的一个简单示例:
pd.Series([[1,2,3], [4,5,6], [1,2,3]])
我正在寻找一个将返回[1,2,3]
的函数。
答案 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
list
个Series
转换为tuple
个Counter
。
执行此操作后,您可以快速使用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]