以下是我的数据:
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(不考虑Manheim Salvage,因为我们希望下一个之后)和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
小于商品价值时才会给出正确的结果,但如果NextOffer
与商品相同则不会。
我想要的是:
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.有什么帮助,我怎么能这样做,还是有任何有效的方法来获得所需的输出?
答案 0 :(得分:2)
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