Pandas如何为升序排列的DataFrame分组旧记录新增标记列
实现方案
你的原有代码存在两个问题:一是使用正序累计计数搭配固定阈值,无法适配不同分组的长度差异;二是没有从最新记录倒推筛选需要排除的3条数据。
由于date列已经提前按升序排列,每组的最后3条就是最新记录,直接使用分组倒序累计计数即可实现需求:倒序计数时,每组最新的3条记录计数值为0、1、2,计数值大于等于3的记录就是需要标记的旧数据。
完整实现代码:
import pandas as pd import numpy as np df['old_data'] = np.where( df.groupby('name').cumcount(ascending=False) >= 3, 'yes', '' )
逻辑校验
对应你给出的预期结果,各分组的计算逻辑完全匹配:
test组共6条记录:倒序计数后前3条旧记录计数值为3、4、5,标记为yes,后3条最新记录留空test3组共4条记录:倒序计数后仅最早1条记录计数值为3,标记为yes,后3条留空test4组共3条记录:所有记录倒序计数值为0、1、2,无符合条件的旧记录,全部留空test5组共8条记录:倒序计数后前5条旧记录计数值≥3,标记为yes,后3条留空test6组共5条记录:倒序计数后前2条旧记录计数值为3、4,标记为yes,后3条留空
运行后输出结果和你给出的预期完全一致。
内容的提问来源于stack exchange,提问作者rovoda
相关产品推荐
相关产品推荐

