Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 执行条件分组,并使用Cumcount选择第二个最佳行_Python_Pandas_Grouping - Fatal编程技术网

Python 执行条件分组,并使用Cumcount选择第二个最佳行

Python 执行条件分组,并使用Cumcount选择第二个最佳行,python,pandas,grouping,Python,Pandas,Grouping,以下是我掌握的数据: ID Vehicle Calculator Offer NextCalculator NextOffer 3497827 2002 Ford Explorer Manheim Salvage 190 Copart 190 3497827 2002 Ford Explorer Manheim Salvage 190 IAA 140 3497827 2002 Ford Explorer

以下是我掌握的数据:

ID              Vehicle     Calculator     Offer NextCalculator NextOffer
3497827 2002 Ford Explorer Manheim Salvage 190  Copart           190
3497827 2002 Ford Explorer Manheim Salvage 190  IAA              140
3497827 2002 Ford Explorer Manheim Salvage 190  Manheim Salvage  190
3497827 2002 Ford Explorer Manheim Salvage 190  SVP              55
3497828 2003 Honda CRV     Manheim Salvage 320  Copart           150
3497828 2003 Honda CRV     Manheim Salvage 320  IAA              320
3497828 2003 Honda CRV     Manheim Salvage 320  Manheim Salvage  320
3497828 2003 Honda CRV     Manheim Salvage 320  SVP              200
我想做的是找出每辆车下一个最好的计算器?例如,对于3497827,下一个最好的报价是Copart-190(不考虑曼海姆打捞,因为我们想要下一个,在它之后),而对于3497828,下一个最好的报价是IAA-320

到目前为止,我已经做到了

df = df.sort_values(['ID', 'NextOffer'], ascending=False)
df1 = df[df.groupby('ID').cumcount() == 1]
这给了我:

ID              Vehicle     Calculator     Offer NextCalculator NextOffer
3497827 2002 Ford Explorer Manheim Salvage 190  Manheim Salvage           190
3497828 2003 Honda CRV     Manheim Salvage 320  IAA              320
只有当
nextofer
小于报价值时,它才会给出正确的结果,但如果
nextofer
与报价相同,则不会给出正确的结果

我想要的是:

ID              Vehicle     Calculator     Offer NextCalculator NextOffer
3497827 2002 Ford Explorer Manheim Salvage 190  Copart           190
3497828 2003 Honda CRV     Manheim Salvage 320  IAA              320
因此,我的猜测是,首先我必须执行cumcount()==0,如果该行的
NextCalculator
Calculator
相同,那么我必须使用cumcount()==1获得第二行。有没有关于如何实现这一点的帮助,或者有没有有效的方法来获得所需的输出?

IIUC:

In [21]: df.loc[df.query("Calculator != NextCalculator")
                  .groupby('ID', as_index=False).NextOffer.idxmax()]
Out[21]:
             ID        Vehicle       Calculator  Offer NextCalculator  NextOffer
0  3497827 2002  Ford Explorer  Manheim Salvage    190         Copart        190
5  3497828 2003      Honda CRV  Manheim Salvage    320            IAA        320