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