Odpowiedzi:
Zakładając, że df
ma unikalny indeks, daje to wiersz o maksymalnej wartości:
In [34]: df.loc[df['Value'].idxmax()]
Out[34]:
Country US
Place Kansas
Value 894
Name: 7
Zauważ, że idxmax
zwraca etykiety indeksowe . Więc jeśli DataFrame ma duplikaty w indeksie, etykieta może nie identyfikować jednoznacznie wiersza, więc df.loc
może zwrócić więcej niż jeden wiersz.
Dlatego jeśli df
nie ma unikalnego indeksu, należy uczynić go unikalnym przed wykonaniem czynności opisanych powyżej. W zależności od ramki DataFrame czasami można użyć stack
lub, set_index
aby indeks był unikalny. Możesz też po prostu zresetować indeks (aby wiersze zostały ponumerowane, zaczynając od 0):
df = df.reset_index()
df[df['Value']==df['Value'].max()]
To zwróci cały wiersz z maksymalną wartością
Kraj i miejsce to indeks serii, jeśli nie potrzebujesz indeksu, możesz ustawić as_index=False
:
df.groupby(['country','place'], as_index=False)['value'].max()
Edytować:
Wygląda na to, że chcesz mieć miejsce z maksymalną wartością dla każdego kraju, poniższy kod zrobi to, co chcesz:
df.groupby("country").apply(lambda df:df.irow(df.value.argmax()))
Myślę, że najłatwiejszym sposobem zwrócenia wiersza z maksymalną wartością jest pobranie jego indeksu. argmax()
można użyć do zwrócenia indeksu wiersza o największej wartości.
index = df.Value.argmax()
Teraz indeks może zostać użyty do pobrania funkcji dla tego konkretnego wiersza:
df.iloc[df.Value.argmax(), 0:2]
Użyj index
atrybutu DataFrame
. Zwróć uwagę, że nie wpisuję wszystkich wierszy w przykładzie.
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')
Możesz również uzyskać wartość według tego indeksu:
In [21]: for index in df.index:
print index, df[index]
....:
('Spain', 'Manchester') 512
('UK', 'London') 778
('US', 'Mchigan') 854
('US', 'NewYork') 562
Przepraszamy za nieporozumienie, czego chcesz, spróbuj wykonać następujące czynności:
In [52]: s=data.max()
In [53]: print '%s, %s, %s' % (s['Country'], s['Place'], s['Value'])
US, NewYork, 854
Aby wydrukować kraj i miejsce z maksymalną wartością, użyj następującego wiersza kodu.
print(df[['Country', 'Place']][df.Value == df.Value.max()])
Moje rozwiązanie do znajdowania maksymalnych wartości w kolumnach:
df.ix[df.idxmax()]
, również minimum:
df.ix[df.idxmin()]
Możesz użyć:
print (df [df ['Wartość'] == df ['Wartość']. max ()])
Napotkałem podobny błąd podczas próby importowania danych przy użyciu pand. Pierwsza kolumna w moim zestawie danych zawiera spacje przed początkiem słów. Usunąłem przestrzenie i działało jak urok!!