2017-09-25 3 views
1

J'ai un cadre de données pandas avec une colonne et j'aimerais connaître l'indice de la médiane. Cela est, je détermine la médiane de cette façon:Obtenir l'index correspondant de la médiane

df.median()

Cela me donne la valeur médiane, mais je voudrais savoir l'indice de cette ligne. Est-il possible de le déterminer? Pour une liste de longueur inégale, je pourrais rechercher l'index avec cette valeur, mais pour les longueurs de liste paires, cela ne fonctionnera pas. Quelqu'un peut-il aider?

Cette question a été posée dans un autre article, où la réponse était essentiellement de rechercher des lignes qui ont la même valeur que la médiane. Mais comme je l'ai dit, cela ne fonctionnera pas pour une liste de longueur égale.

est un exemple ci-dessous min (j'ai inclus la suggestion faite par Wen ci-dessous):

df = pd.DataFrame(np.random.randn(6, 1), columns=list('A')) 
df.median() 
df.loc[df[0]==df[0].median()] 

Out[120]: 
Empty DataFrame 
Columns: [0] 
Index: [] 
+2

'df.loc [df.col == df.col.median()]' – Wen

+0

Merci Wen. Je reçois cette erreur en utilisant cette commande: L'objet 'DataFrame' n'a pas d'attribut 'col' –

+0

Remplacez col par les noms de colonnes. – Wen

Répondre

2

Vous pouvez utiliser la réponse de Wen pour dataframes de longueur impaire.

Pour les données de longueur égale, la question n'a pas vraiment de sens. Comme vous l'avez souligné, la médiane n'existe pas dans la base de données. Cependant, vous pouvez trier les données par votre colonne d'intérêt et ensuite trouver les indices pour les deux valeurs "médianes".

import pandas as pd 
import numpy as np 

df = pd.DataFrame(np.random.randn(6, 1), columns=list('A')) 
df.median() 

df.loc[df['A']==df['A'].median()] 

df.sort_values(by='A', inplace=True) 

df[df['A'] > df['A'].median()].iloc[0] 
df[df['A'] < df['A'].median()].iloc[-1] 
+0

Oh oui, vous avez bien sûr raison, car la médiane n'est pas dans le dataframe. C'est une excellente solution alternative. Ça marche pour moi. Merci beaucoup!!! –