2016-04-26 72 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