如何为已排序的Pandas DataFrame添加标记最新版本的Last列?
给分组排序后的DataFrame标记最新版本行
已知你的DataFrame已通过df.sort_values(['Code', 'Rev'], ascending = [True,False])完成按Code升序、Rev降序的排序,现在要新增Last列,标记每个Code分组中Rev最大的行为OK,其余为NOK,这里提供两种简单实现方式:
方法一:利用排序后的重复值特性(高效贴合当前排序场景)
因为已经按Code分组并将Rev降序排列,每个Code分组的第一行就是Rev最大的行,后续行都是同Code但Rev更小的。可以用duplicated()方法标记重复的Code行,再映射为OK/NOK:
df['Last'] = df.duplicated('Code').map({True: 'NOK', False: 'OK'})
方法二:不依赖排序的通用方法
如果后续可能调整排序逻辑,也可以用分组取最大值的方式,不依赖当前排序状态:
df['Last'] = df.groupby('Code')['Rev'].transform(lambda x: x == x.max()).map({True: 'OK', False: 'NOK'})
效果验证
原始DataFrame:
| Code | Time | Rev |
|---|---|---|
| AAA | 5 | 3 |
| AAA | 3 | 2 |
| AAA | 6 | 1 |
| BBB | 10 | 2 |
| BBB | 5 | 1 |
执行代码后得到目标DataFrame:
| Code | Time | Rev | Last |
|---|---|---|---|
| AAA | 5 | 3 | OK |
| AAA | 3 | 2 | NOK |
| AAA | 6 | 1 | NOK |
| BBB | 10 | 2 | OK |
| BBB | 5 | 1 | NOK |
内容的提问来源于stack exchange,提问作者user19613662
相关产品推荐
相关产品推荐

