2017-12-01 4 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 

「コニーを持つ2つのレコードがあります。しかし、私はその結果から、奇妙な何かを見つけました私は大多数を選択する必要があります。

>>>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なので正しいです。

また、私はそうstring列はautomatic exclusion of nuisance columnsでは省略されていない、thisを見つける:

文字列がLT()は(分で構築されたので、定義された)を持っているとmax()がそれに取り組んでいます。非数値オブジェクトが適切な比較メソッドをサポートする場合、min()およびmax()集計関数はあいまいでなければなりません。正しい出力について

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

locによって選択しCount列のグループごとの最大値のインデックスに対してidxmaxを必要と:

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