Відповіді:
Припускаючи, що 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 ()])
Я зіткнувся з подібною помилкою під час спроби імпорту даних за допомогою панд. Перший стовпець у моєму наборі даних мав пробіли до початку слів. Я видалив пробіли, і це спрацювало як шарм !!