Python Pandas를 사용 하여 최대 값으로 Country
& 를 찾으려고합니다 Place
.
최대 값을 반환합니다.
data.groupby(['Country','Place'])['Value'].max()
그러나 해당 이름 Country
과 Place
이름을 어떻게 얻 습니까?
답변
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()]