在Pandas中执行条件分组和选择第二最佳行使用Cumcount

2024-10-02 22:23:01 发布

您现在位置:Python中文网/ 问答频道 /正文

以下是我掌握的数据:

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

只有当NextOffers小于Offer值时,它才会给出正确的结果,但如果NextOffer与Offer相同,则不会给出正确的结果

我想要的是:

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,如果那一行的NextCalculatorCalculator相同,那么我必须使用cumcount()==1来获得第二行。有什么帮助吗?或者有什么有效的方法来获得所需的输出吗


Tags: iddfcalculatorofferexplorervehiclefordsalvage
1条回答
网友
1楼 · 发布于 2024-10-02 22:23:01

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

相关问题 更多 >