2017-12-01 1 views
1

이름, 성별 및 개수가 CSV 인 것으로 가정 해 보겠습니다.DataFrame.groupby() 및 max()에서 예기치 않은 결과가 발생했습니다.

groupby() 및 max()를 사용하여 다수 이름을 찾고 있습니다. 하지만 결과에서 이상한 것을 발견

CSV :

Name  Gender Count 
Connie F  90 
Connie F  78 
Peter M  200 
Connie M  5 
Connie F  94 
Connie F  67 
John  M  100 
Connie F  73 
Connie F  82 
Connie F  73 
May  F  65 

코드의 첫 번째 부분은 잘 찾고 :

>>>data = pd.read_csv('names.txt',names=['Name','Gender','Count']) 
>>>data = data.groupby(['Name','Gender']).sum().reset_index() 
>>>print (data) 
    Name Gender Count 
0 Connie  F 557 
1 Connie  M  5 
2 John  M 100 
3  May  F  65 
4 Peter  M 200 

은 코니 '와 두 개의 레코드를있다 '나는 다수를 선택해야한다.

>>>data= data.groupby(['Name']).max().reset_index() 
>>>print(data) 
    Name Gender Count 
0 Connie  M 557 
1 John  M 100 
2  May  F  65 
3 Peter  M 200 

은 '코니'의 성별 M 대신 F 수 있도록 내가 뭘 잘못 했습니까? 최대 개수는 정확하지만

답변

1

M>F이므로 올바른 설명은 here입니다.

는 또한 I 그래서 stringautomatic exclusion of nuisance columns 생략되지 this 발견 :

문자열 LT가())을 따라서 최소() 및 최대 (내장 정의 그들 작업. 비 숫자 객체가 적절한 비교 메소드를 지원하면 min() 및 max() 집계 함수가 모호하지 않아야합니다. 올바른 출력 들어

print (data.groupby(['Name'])['Gender'].max()) 
Name 
Connie M 
John  M 
May  F 
Peter  M 
Name: Gender, dtype: object 

Count 열의 그룹 당 최대 값의 인덱스에 대한 idxmax 필요하고 loc 의해 선택

print (data.groupby(['Name'])['Count'].idxmax()) 
Name 
Connie 0 
John  2 
May  3 
Peter  4 
Name: Count, dtype: int64 

data = data.loc[data.groupby(['Name'])['Count'].idxmax()] 
print (data) 
    Name Gender Count 
0 Connie  F 557 
2 John  M 100 
3  May  F  65 
4 Peter  M 200