pythonでstatistics.mode([1,1,2,2,3])
関数を使用してモードを計算すると、no unique mode; found 2 equally common values
が返されます。このようにして、1
または2
。誰か良いアイデアはありますか?
例えば:
lst = [1, 1, 2, 2, 3]
# test for count lst elements
lst_count = [[x, lst.count(x)] for x in set(lst)]
print lst_count
# [[1, 2], [2, 2], [3, 1]]
# remove count <= 1
lst_count = [x for x in set(lst) if lst.count(x) > 1]
print lst_count
# [1, 2]
# get 1 or 2 by index
print lst_count[0], lst_count[1]
# 1 2
別の方法:
from collections import Counter
# change lst elements to str, for more readable
lst = ['a', 'a', 'b', 'b', 'c']
# get a dict, key is the elements in lst, value is count of the element
d_mem_count = Counter(lst)
print d_mem_count
# Counter({'a': 2, 'b': 2, 'c': 1})
for k in d_mem_count.keys():
if d_mem_count[k] > 1:
print k
# output as below
# a
# b
from scipy import stats as s
a=[1,1,2,2,3]
print(int(s.mode(a)[0]))
次の関数を試してください。一意のモードがない場合に最大値をモードとして検索します。
import statistics
def find_max_mode(list1):
list_table = statistics._counts(list1)
len_table = len(list_table)
if len_table == 1:
max_mode = statistics.mode(list1)
else:
new_list = []
for i in range(len_table):
new_list.append(list_table[i][0])
max_mode = max(new_list) # use the max value here
return max_mode
if __name__ == '__main__':
a = [1,1,2,2,3]
print(find_max_mode(a)) # print 2
from collections import Counter
c = Counter([1,1,2,2,3])
c.most_common(1)
# output
>>> [(1,2)] #the key 1, 2 occurrences.
ドキュメントから:
"most_common([n]):最も一般的なn個の要素とそれらの数の最も一般的なものから最も少ないものまでのリストを返します。等しい数の要素は任意に並べられます"
私は同じ問題に直面しました。これは私がかなり簡単にそれを解決した方法です:
def most_element(liste):
numeral=[[liste.count(nb), nb] for nb in liste]
numeral.sort(key=lambda x:x[0], reverse=True)
return(numeral[0][1])
これが最もエレガントな方法であるかどうかはわかりませんが、それは仕事です:)。それが役に立てば幸い