如何选择具有最大索引的组的行

时间:2016-05-25 11:28:33

标签: python pandas

我有一个dataframe如下(更大),我有groupby'A',我想用greatest index选择每个组的行(foo和bar) 。

serie2 = pd.DataFrame({'A':['foo','foo','foo','bar','bar','bar'],'a':   [1,2,5,3,6,4],'b':np.random.rand(6)})

请帮忙

1 个答案:

答案 0 :(得分:1)

时间:为1.2M行DF:

In [60]: a.shape
Out[60]: (1200000, 3)

In [61]: %timeit a.loc[a.reset_index().groupby('A')['index'].max()]
1 loop, best of 3: 1.25 s per loop

结论:我的家用笔记本需要1.25秒才能获得1.200.000行DF

<强>更新

In [47]: a = a.loc[a.reset_index().groupby('A')['index'].max()]

In [48]: a
Out[48]:
     A  a         b
5  bar  4  0.365713
2  foo  5  0.291325

说明:

我们使用reset_index()来保留groupby调用后的索引值,但它不会重置原始DF中的索引,它将在DF&#上完成39;副本:

In [46]: a.reset_index()
Out[46]:
   index    A  a         b
0      0  foo  1  0.079306
1      1  foo  2  0.714666
2      2  foo  5  0.291325
3      3  bar  3  0.554277
4      4  bar  6  0.827812
5      5  bar  4  0.365713

OLD回答:

是你想要的吗?

In [23]: a
Out[23]:
     A  a         b
0  foo  1  0.079306
1  foo  2  0.714666
2  foo  5  0.291325
3  bar  3  0.554277
4  bar  6  0.827812
5  bar  4  0.365713

In [24]: a.reset_index().groupby('A')['index'].max()
Out[24]:
A
bar    5
foo    2
Name: index, dtype: int64

或:

In [25]: idx = a.reset_index().groupby('A')['index'].max()

In [26]: idx
Out[26]:
A
bar    5
foo    2
Name: index, dtype: int64

In [28]: a.loc[idx]
Out[28]:
     A  a         b
5  bar  4  0.365713
2  foo  5  0.291325