如何获得pandas系列中最常出现的物品?
pandas
考虑系列 s
s
s = pd.Series("1 5 3 3 3 5 2 1 8 10 2 3 3 3".split()).astype(int)
返回值应该是 3
3
您可以使用pd.Series.mode并提取第一个值:
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