Ответы:
Предполагая, что df
имеет уникальный индекс, это дает строку с максимальным значением:
In [34]: df.loc[df['Value'].idxmax()]
Out[34]:
Country US
Place Kansas
Value 894
Name: 7
Обратите внимание, что idxmax
возвращает метки индекса . Таким образом, если DataFrame имеет дубликаты в индексе, метка может не однозначно идентифицировать строку, поэтому df.loc
может возвращать более одной строки.
Следовательно, если у df
него нет уникального индекса, вы должны сделать индекс уникальным, прежде чем действовать, как указано выше. В зависимости от DataFrame иногда можно использовать stack
или, set_index
чтобы сделать индекс уникальным. Или вы можете просто сбросить индекс (чтобы строки были перенумерованы, начиная с 0):
df = df.reset_index()
df[df['Value']==df['Value'].max()]
Это вернет всю строку с максимальным значением
Страна и место - это индекс серии, если вам не нужен индекс, вы можете установить as_index=False
:
df.groupby(['country','place'], as_index=False)['value'].max()
Редактировать:
Кажется, вам нужно место с максимальным значением для каждой страны, следующий код сделает то, что вы хотите:
df.groupby("country").apply(lambda df:df.irow(df.value.argmax()))
Я думаю, что самый простой способ вернуть строку с максимальным значением - получить ее индекс. argmax()
может использоваться для возврата индекса строки с наибольшим значением.
index = df.Value.argmax()
Теперь индекс можно использовать для получения функций для этой конкретной строки:
df.iloc[df.Value.argmax(), 0:2]
Используйте index
атрибут DataFrame
. Обратите внимание, что я не набираю все строки в примере.
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')
Вы также можете получить значение по этому индексу:
In [21]: for index in df.index:
print index, df[index]
....:
('Spain', 'Manchester') 512
('UK', 'London') 778
('US', 'Mchigan') 854
('US', 'NewYork') 562
Извините за недопонимание, что вы хотите, попробуйте следующее:
In [52]: s=data.max()
In [53]: print '%s, %s, %s' % (s['Country'], s['Place'], s['Value'])
US, NewYork, 854
Чтобы напечатать страну и место с максимальным значением, используйте следующую строку кода.
print(df[['Country', 'Place']][df.Value == df.Value.max()])
Мое решение для поиска максимальных значений в столбцах:
df.ix[df.idxmax()]
, также минимум:
df.ix[df.idxmin()]
Ты можешь использовать:
print (df [df ['Значение'] == df ['Значение']. max ()])
Я столкнулся с аналогичной ошибкой при попытке импортировать данные с помощью панд. В первом столбце моего набора данных были пробелы перед началом слов. Я удалил пробелы, и это сработало как шарм !!