Pandas如何标记分组内指定列最大值对应行 新增标识列实现需求
基础需求实现(按car_brand分组标记最新行)
直接用groupby+transform组合即可一行实现需求,不需要额外取索引赋值:
import pandas as pd # 你提供的初始化代码 data = pd.DataFrame({'car_plate':['1v','2f','3a','h0','m1'], 'car_brand':['Honda','Honda','Ford','Audi','Audi'], 'last_seen':['01/01/2020','01/02/2020','01/03/2020','01/04/2020','01/05/2020']}) data['last_seen'] = pd.to_datetime(data['last_seen']) # 新增recent列核心代码 data['recent'] = data.groupby('car_brand')['last_seen'].transform(lambda x: x == x.max()).astype(int)
运行后输出的data就是你需要的结果,逻辑是:按car_brand分组后,判断每行的last_seen是否等于该组的最大值,布尔值转整数后自然得到1/0的标记。如果同组有多行同时命中最大时间,这些行都会被标记为1,符合常规业务逻辑。
多维度分组扩展实现
如果新增car_owner字段,需要按car_brand分组后,标记每个car_plate+car_owner组合的最新last_seen行,只需要修改groupby的分组键即可,把需要区分的维度都放到分组参数里:
# 假设你的数据已经新增了car_owner列,核心代码如下 data['recent'] = data.groupby(['car_brand', 'car_plate', 'car_owner'])['last_seen'].transform(lambda x: x == x.max()).astype(int)
这个写法会自动识别每个品牌下,相同车牌+车主组合的最大时间行,标记为1,其他为0,和基础需求的逻辑完全一致,仅调整分组维度即可适配。
内容的提问来源于stack exchange,提问作者Alejandro A
相关产品推荐
相关产品推荐

