假设我有以下数据框捕获订单号,相同订单的修订号以及总价:
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排序
答案 0 :(得分:4)
您可以将duplicated
与map
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'
。