我有一个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)})
请帮忙
答案 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