3
respostas

Como calcular mediana sem utilizar a função ".median()"

Olá, alguém poderia me ajudar a calcular a mediana de series pares no python ? Eu sei que dá pra fazer utilizando a função ".median()", mas eu gostaria de saber aplicar a fórmula matemática na mão.

notas_beltrano = df1.Beltrano.sample(6, random_state = 101)
notas_beltrano

notas_beltrano = notas_beltrano.sort_values()
notas_beltrano

notas_beltrano = notas_beltrano.reset_index()
notas_beltrano

n_nota_beltrano = notas_beltrano.shape[0]
n_nota_beltrano
6

elemento_mediano_beltrano = (n_nota_beltrano + 1)/2
elemento_mediano_beltrano
3.5

Eu cheguei até esta parte, daí quando eu tento selecionar os elementos por meio de slicing eu não consigo, ele volta valor NaN. Obrigado

3 respostas

Olá Marcelo,

Como temos um número par de itens temos que encontrar os dois números centrais antes de calcular a mediana:

1 2 3 4 5 6

Após calcular o valor de elemento_mediano_beltrano, continuando diretamente do seu código acima, você pode fazer assim:

# Pega o local dos dois elementos centrais
elemento_mediano_beltrano_acima = round(elemento_mediano_beltrano)
elemento_mediano_beltrano_abaixo = elemento_mediano_beltrano_acima - 1

# Pega o valor dos dois elementos centrais
elemento_mediano_beltrano_abaixo = notas_beltrano.loc[elemento_mediano_beltrano_abaixo - 1]["Beltrano"]
elemento_mediano_beltrano_acima = notas_beltrano.loc[elemento_mediano_beltrano_acima - 1]["Beltrano"]

# Soma os dois elementos centrais e calcula a média
mediana = (elemento_mediano_beltrano_abaixo + elemento_mediano_beltrano_acima) / 2

Espero ter ajudado, qualquer dúvida pode perguntar.

Ajudou bastante a eu entender sobre o .loc, mas eu gostaria mesmo era o valor da nota, no caso a media entre nota de história e física... Desculpe não ser mais claro antes.

index Beltrano 0 Inglês 0.5 1 Portugues 2.0 2 História 3.0 3 Fisica 9.5 4 Matematica 10.0 5 Quimica 10.0

Queria saber como faz para usar os valores das notas, porque a mediana é 6.25, mas eu não sei fazer a conta utilizando os valores de história e física...

Oi Marcelo,

Lembre-se que vimos que quando n for par, a posição do elemento mediano será obtida da seguinte forma:

elemento_md = n / 2

E que a mediana neste caso é obtida da seguinte forma:

Mediana = ( X[elemento_md] + X[elemento_md + 1] ) / 2

Como em Python a indexação começa no 0 (zero), precisamos fazer uma pequena modificação na fórmula acima para obtermos o valor correto:

Mediana = ( X[elemento_md - 1] + X[elemento_md] ) / 2

Isso mostra que a mediana é a média aritmética entre os dois valores centrais da distribuição.

No seu notebook ficaria da seguinte forma:

import pandas as pd

df = pd.DataFrame(data = {'Fulano': [8, 10, 4, 8, 6, 10, 8],
                          'Beltrano': [10, 2, 0.5, 1, 3, 9.5, 10],
                          'Sicrano': [7.5, 8, 7, 8, 8, 8.5, 7]}, 
                  index = ['Matemática', 'Português', 'Inglês', 'Geografia', 'História', 'Física', 'Química'])
df.rename_axis('Matérias', axis = 'columns', inplace = True)

# Amostra para obtermos apenas 6 registros
notas_beltrano = df.Beltrano.sample(6, random_state = 101)

# Ordenação das notas em ordem crescente 
notas_beltrano = notas_beltrano.sort_values()

# Transformando o index em uma variável do DataFrame
notas_beltrano = notas_beltrano.reset_index()

# Obtenção do elemento mediano
n = notas_beltrano.shape[0]
elemento_md = n / 2

# Cálculo da mediana. Como n é par a mediana é a média 
# aritmética dos dois elementos centrais da distribuição
(notas_beltrano.Beltrano.loc[elemento_md - 1] + notas_beltrano.Beltrano.loc[elemento_md]) / 2

Valeu e bons estudos