Pandas中groupby结合shift实现STDEPTH列跨CODE取值的问题
偏差根源
之前的代码将CODE作为分组键,同KEY下首次出现的不同CODE会被识别为独立分组的起始行,触发fill_value=0的填充逻辑,直接造成你提到的12-14行被错误标记为0值。
如果直接移除分组里的CODE但不处理空值,每个KEY的第一行因为没有前置参考值会返回空值,达不到“KEY切换时对应行STDEPTH填0”的要求;如果把分组里的CODE替换为RPTDATE,同KEY下报告日期切换的行又会被识别为新组,错误触发0填充逻辑,完全偏离需求。
可直接使用的实现代码
df['STDEPTH'] = df.groupby('KEY')['ENDDEPTH'].shift().fillna(0).astype(int)
效果校验
- 分组逻辑仅以
KEY为边界,同KEY下完全忽略CODE、RPTDATE的取值差异,逐行取上一行的ENDDEPTH作为当前行的STDEPTH - 每个KEY分组的首行产生的空值统一填充为0,严格匹配KEY切换时的填充规则
- 你提到的12-14行属于KEY=101下的连续行,不会被分组逻辑截断,STDEPTH值会与同组前序行完全一致,不会出现错误的0值
内容的提问来源于stack exchange,提问作者Heather
相关产品推荐
相关产品推荐

