Как найти медианную

У меня есть такие данные.

Ram,500 Sam,400 Test,100 Ram,800 Sam,700 Test,300 Ram,900 Sam,800 Test,400 

Каков самый короткий способ оценить «медианную» из вышеперечисленных данных. Мой результат должен быть чем-то вроде …

Медиана = 1/2 (n + 1), где n – количество значений данных в выборке.

 Test 500 Sam 700 Ram 800 

  • Фильтрация столбцов в PySpark
  • Как я могу использовать как ключ, так и индекс для одного значения словаря?
  • Django form.as_p DateField не показывает тип ввода как дату
  • Будет ли Python хорошо заменять сценарии командной строки Windows / пакетной обработки?
  • Почему Python имеет максимальную глубину рекурсии?
  • Как извлечь числовые диапазоны из 2 столбцов, содержащих числовые последовательности, и напечатать диапазон из обоих столбцов (разные значения прироста)?
  • Как найти установленную версию pandas
  • Вычисление python изображения дисперсии
  • 6 Solutions collect form web for “Как найти медианную”

    Используйте среднюю функцию numpy .

    Python 3.4 включает встроенную статистику , поэтому вы можете использовать метод statistics.median :

     >>> from statistics import median >>> median([1, 3, 5]) 3 

    Немного неясно, как на самом деле представлены ваши данные, поэтому я предположил, что это список кортежей:

     data = [('Ram',500), ('Sam',400), ('Test',100), ('Ram',800), ('Sam',700), ('Test',300), ('Ram',900), ('Sam',800), ('Test',400)] from collections import defaultdict def median(mylist): sorts = sorted(mylist) length = len(sorts) if not length % 2: return (sorts[length / 2] + sorts[length / 2 - 1]) / 2.0 return sorts[length / 2] data_dict = defaultdict(list) for el in data: data_dict[el[0]].append(el[1]) print [(key,median(val)) for key, val in data_dict.items()] print median([5,2,4,3,1]) print median([5,2,4,3,1,6]) #output: [('Test', 300), ('Ram', 800), ('Sam', 700)] 3 3.5 

    Функция median возвращает медиану из списка. Если есть четное количество записей, это занимает среднее значение средних двух записей (это стандартно).

    Я использовал defaultdict для создания ключа, определяемого вашими данными и их значениями, что является более полезным представлением ваших данных.

    Проверь это:

     def median(lst): even = (0 if len(lst) % 2 else 1) + 1 half = (len(lst) - 1) / 2 return sum(sorted(lst)[half:half + even]) / float(even) 

    Заметка:

    sorted(lst) производит отсортированную копию lst ;

    sum([1]) == 1 ;

    Самый простой способ получить медиану списка с целыми данными:

     x = [1,3,2] print "The median of x is:",sorted(x)[len(x)//2] 

    Я начал с ответа user3100512 и быстро понял, что он не работает для четного количества элементов. Я добавил некоторые условные выражения для вычисления медианы.

     def median(x): if len(x)%2 != 0: return sorted(x)[len(x)/2] else: midavg = (sorted(x)[len(x)/2] + sorted(x)[len(x)/2-1])/2.0 return midavg median([4,5,6,7]) 

    должен вернуть 5.5

    Python - лучший язык программирования в мире.