2016-04-26 101 views
2

我遇到了一個熊貓數據框的問題。我有一個有三列的數據框,前兩個是標識符(str),第三個是數字。Groupby沒有丟失列

我想分組,使我得到的第一列第三作爲最大,第二列索引對應第三。

這不是很清楚,所以我們來舉個例子吧。我的數據框的樣子:

id1    id2    amount 
0 first_person  first_category  18 
1 first_person  second_category 37 
2 second_person first_category  229 
3 second_person third_category  23 

,如果你需要它的代碼:

df = pd.DataFrame([['first_person','first_category',18],['first_person','second_category',37],['second_person','first_category',229],['second_person','third_category',23]],columns = ['id1','id2','amount']) 

而且我想獲得:

id1    id2    amount 
0 first_person  second_category 37 
1 second_person third_category  229 

我已經嘗試了GROUPBY方法,但它讓我失去第二列:

result = df.groupby(['id1'],as_index=False).agg({'amount':np.max}) 
+0

'df.groupby([「ID1」],as_index =假).max()' - 是你想要的嗎? – MaxU

+0

事情是,它不是每次最大的數量對應(*編輯我的帖子來說清楚) – ysearka

+0

@MaxU認爲它也是第一次,但它返回最大值的id2和'金額',而不是最大'金額'的行。 –

回答

1

IIUC要groupby在「ID1」和使用idxmax確定與量最大的行,並使用該索引到你原來的DF:

In [9]: 
df.loc[df.groupby('id1')['amount'].idxmax()] 

Out[9]: 
      id1    id2 amount 
1 first_person second_category  37 
2 second_person first_category  229