Python 如何选择组';s具有最大索引的行

Python 如何选择组';s具有最大索引的行,python,pandas,Python,Pandas,我有一个dataframe,如下所示(大得多),我有groupby“a”,我想用最大索引选择每个组的行(foo和bar) serie2 = pd.DataFrame({'A':['foo','foo','foo','bar','bar','bar'],'a': [1,2,5,3,6,4],'b':np.random.rand(6)}) 请帮助调整时间:对于120万行DF: In [60]: a.shape Out[60]: (1200000, 3) In [61]: %timeit a.

我有一个
dataframe
,如下所示(大得多),我有
groupby
“a”,我想用
最大索引选择每个组的行(foo和bar)

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

请帮助调整时间:对于120万行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
结论:在我的家庭笔记本上记录1200.000行数据需要1.25秒

更新:

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的副本上执行:

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
旧答案:

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
这就是你想要的吗

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
或:


没有。假设我有一个精确的数据帧'a',索引就是它。我需要的是保留索引为2和5的整行,并删除其他行。对于我的数据帧,我不想重置索引,我需要索引来选择行。为什么要重置_index()?哦,是的,我已经尝试过了,它确实按照我的需要选择索引,但是.loc似乎需要很长时间来计算。它仍然在运行…@NathalieHB,通常
loc
非常快,所以我认为是其他原因使它变慢了。在这种情况下,您可以尝试使用iloc,它可能会快一点。您的df的形状(
df.shape
)是什么?df的形状是962236-11