web-dev-qa-db-ja.com

独自のモードはありません。 2つの共通の値が見つかりました

pythonでstatistics.mode([1,1,2,2,3])関数を使用してモードを計算すると、no unique mode; found 2 equally common valuesが返されます。このようにして、1または2。誰か良いアイデアはありますか?

3
mgcy

例えば:

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
0
Jayhello
from scipy import stats as s
a=[1,1,2,2,3]
print(int(s.mode(a)[0]))
3

次の関数を試してください。一意のモードがない場合に最大値をモードとして検索します。

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
3
mgcy
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個の要素とそれらの数の最も一般的なものから最も少ないものまでのリストを返します。等しい数の要素は任意に並べられます"

3
omargamal8

私は同じ問題に直面しました。これは私がかなり簡単にそれを解決した方法です:

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])

これが最もエレガントな方法であるかどうかはわかりませんが、それは仕事です:)。それが役に立てば幸い

0
Simon