python - pandas:如何获取pandas系列中出现频率最高的item?
问题描述
我怎样才能得到最频繁的项目pandas
系列中最常见的项目?
考虑系列s
s = pd.Series("1 5 3 3 3 5 2 1 8 10 2 3 3 3".split()).astype(int)
返回值应该是3
解决方案
您可以只使用pd.Series.mode
并提取第一个值:
res = s.mode().iloc[0]
这不一定是低效的。与往常一样,用您的数据进行测试,看看适合什么。
import numpy as np, pandas as pd
from scipy.stats.mstats import mode
from collections import Counter
np.random.seed(0)
s = pd.Series(np.random.randint(0, 100, 100000))
def jez_np(s):
_, idx, counts = np.unique(s, return_index=True, return_counts=True)
index = idx[np.argmax(counts)]
val = s[index]
return val
def pir(s):
i, r = s.factorize()
return r[np.bincount(i).argmax()]
%timeit s.mode().iloc[0] # 1.82 ms
%timeit pir(s) # 2.21 ms
%timeit s.value_counts().index[0] # 2.52 ms
%timeit mode(s).mode[0] # 5.64 ms
%timeit jez_np(s) # 8.26 ms
%timeit Counter(s).most_common(1)[0][0] # 8.27 ms
推荐阅读
- c# - 'Checked = True' 导致异常
- android - 如何使用 Kotlin 在 OnPreferenceChangeListener 上保存 newValue?
- android - 带右箭头的按钮
- arrays - 将数字推入矩阵数组
- php - 数据未使用 wamp 服务器从 php 代码插入 mysql 数据库
- ssl - Chrome 扩展 .pem 文件有什么用途?
- swift - 为什么公共类型会抛出私有类型的错误?
- java - 查找由 Java 无意的隐式缩窄转换导致的整数溢出
- vb.net - 如何在 vb.net 中关闭 if 语句
- validation - 使用@Valid 声明 bean