Réponses:
En supposant qu'il df
possède un index unique, cela donne la ligne avec la valeur maximale:
In [34]: df.loc[df['Value'].idxmax()]
Out[34]:
Country US
Place Kansas
Value 894
Name: 7
Notez que idxmax
renvoie les étiquettes d' index . Ainsi, si le DataFrame a des doublons dans l'index, l'étiquette peut ne pas identifier de manière unique la ligne, donc df.loc
peut renvoyer plus d'une ligne.
Par conséquent, s'il df
n'a pas d'index unique, vous devez rendre l'index unique avant de procéder comme ci-dessus. Selon le DataFrame, vous pouvez parfois utiliser stack
ou set_index
pour rendre l'index unique. Ou, vous pouvez simplement réinitialiser l'index (pour que les lignes soient renumérotées, à partir de 0):
df = df.reset_index()
df[df['Value']==df['Value'].max()]
Cela renverra la ligne entière avec la valeur maximale
Le pays et le lieu sont l'index de la série, si vous n'avez pas besoin de l'index, vous pouvez définir as_index=False
:
df.groupby(['country','place'], as_index=False)['value'].max()
Éditer:
Il semble que vous vouliez l'endroit avec une valeur maximale pour chaque pays, le code suivant fera ce que vous voulez:
df.groupby("country").apply(lambda df:df.irow(df.value.argmax()))
Je pense que le moyen le plus simple de renvoyer une ligne avec la valeur maximale est d'obtenir son index. argmax()
peut être utilisé pour renvoyer l'index de la ligne avec la plus grande valeur.
index = df.Value.argmax()
Maintenant, l'index peut être utilisé pour obtenir les fonctionnalités de cette ligne particulière:
df.iloc[df.Value.argmax(), 0:2]
Utilisez l' index
attribut de DataFrame
. Notez que je ne tape pas toutes les lignes de l'exemple.
In [14]: df = data.groupby(['Country','Place'])['Value'].max()
In [15]: df.index
Out[15]:
MultiIndex
[Spain Manchester, UK London , US Mchigan , NewYork ]
In [16]: df.index[0]
Out[16]: ('Spain', 'Manchester')
In [17]: df.index[1]
Out[17]: ('UK', 'London')
Vous pouvez également obtenir la valeur par cet index:
In [21]: for index in df.index:
print index, df[index]
....:
('Spain', 'Manchester') 512
('UK', 'London') 778
('US', 'Mchigan') 854
('US', 'NewYork') 562
Désolé de mal comprendre ce que vous voulez, essayez ce qui suit:
In [52]: s=data.max()
In [53]: print '%s, %s, %s' % (s['Country'], s['Place'], s['Value'])
US, NewYork, 854
Pour imprimer le pays et le lieu avec une valeur maximale, utilisez la ligne de code suivante.
print(df[['Country', 'Place']][df.Value == df.Value.max()])
Ma solution pour trouver les valeurs maximales dans les colonnes:
df.ix[df.idxmax()]
, également minimum:
df.ix[df.idxmin()]
Vous pouvez utiliser:
print (df [df ['Value'] == df ['Value']. max ()])
J'ai rencontré une erreur similaire en essayant d'importer des données à l'aide de pandas.La première colonne de mon ensemble de données avait des espaces avant le début des mots. J'ai supprimé les espaces et cela a fonctionné comme un charme !!