按Account id分组追踪Adoption Ladder状态变更问题求助
按Account ID分组追踪Adoption Ladder状态变更的修正方案
问题说明
你需要按Account id分组,追踪同一账号内Adoption Ladder列的状态变更(记录前态prev和现态cur),但当前代码未做分组处理,导致跨账号的行被误判为状态变更——比如账号111的最后一条记录和账号222的第一条记录会被错误对比,生成无效的变更标记。
现有代码:
data['changes From->To'] = ['no changes'] + [prev + ' --> ' + cur if prev != cur else 'no changes' for prev, cur in zip(data['Adoption ladder'], data['Adoption ladder'][1:])]
核心问题:这段代码是全局对比Adoption ladder的前后行,完全忽略了Account id的分组边界。
修正方案
用pandas的groupby按账号分组后,再在组内做状态对比:
import pandas as pd # 为每个账号内的行生成前一个状态值,跨账号的行prev_ladder为NaN data['prev_ladder'] = data.groupby('Account id')['Adoption ladder'].shift(1) # 生成变更记录:仅同一账号内状态变化时记录,否则标记为no changes data['changes From->To'] = data.apply( lambda row: f"{row['prev_ladder']} --> {row['Adoption ladder']}" if pd.notna(row['prev_ladder']) and row['prev_ladder'] != row['Adoption ladder'] else 'no changes', axis=1 )
逻辑解释
groupby('Account id')['Adoption ladder'].shift(1):只在同一个账号的范围内,把Adoption ladder的值向上偏移一行,这样每个行的prev_ladder只会是同账号的上一条状态,新账号的第一行prev_ladder会是NaNapply判断逻辑:只有当prev_ladder不为空(说明是同账号的后续行)且前后状态不同时,才生成From->To的变更记录;其余情况(包括跨账号行、同账号状态未变)都标记为no changes
这样就能精准实现同一账号内的状态变更追踪,避免跨账号的误判。
内容的提问来源于stack exchange,提问作者koolio
相关产品推荐
相关产品推荐

