如何创建一个新列,说明此行是否是Pandas中每个订单的最新修订订单

时间:2018-04-12 17:05:32

标签: python python-2.7 pandas dataframe

假设我有以下数据框捕获订单号,相同订单的修订号以及总价:

library(gsubfn)
lengths(strapplyc(x, pat))
## [1] 1

我如何添加一个列,说明此行是否是订单的最新修订版?期望的输出如下:

OrderNum  RevNum  TotalPrice
 0AXL3     0       $5.00
 0AXL3     1       $4.00
 0AXL3     2       $7.00
 0AXL3     3       $8.00
 0BDF1     0       $3.00
 0BDF1     1       $2.50
 0BDF1     2       $8.50

请注意,这与之前提出的here

问题非常类似 然而,我们现在只想要一个新列,说明这是否是最新版本,而不是删除以前的条目。提前感谢您的帮助!!

编辑:我的数据框中的行不一定按OrderNum排序

2 个答案:

答案 0 :(得分:4)

您可以将duplicatedmap

一起使用
df['NewestRevision']=df.duplicated('OrderNum',keep='last').map({True:'No',False:'Yes'})
df
Out[328]: 
  OrderNum  RevNum TotalPrice NewestRevision
0    0AXL3       0      $5.00             No
1    0AXL3       1      $4.00             No
2    0AXL3       2      $7.00             No
3    0AXL3       3      $8.00            Yes
4    0BDF1       0      $3.00             No
5    0BDF1       1      $2.50             No
6    0BDF1       2      $8.50            Yes

答案 1 :(得分:2)

如果您的行始终排序,则下面的

@Wen's answer非常好,因此每个组中的最后一行是最新版本。

如果情况并非如此,并且假设“最新修订版”相当于组中具有最高RevNum,则可以执行以下操作:

import numpy as np
df['NewestRevision'] = np.where( \
    df.RevNum == df.groupby('OrderNum')['RevNum'].transform(np.max), 'Yes', 'No')

检查RevNum是否与给定RevNum的最高OrderNum相同,如果是,则返回'Yes',否则返回'No'