Pandas中按groupby分组规则逐行添加哑变量并保留历史值的实现方法
Pandas 分组滚动继承哑变量实现方案
完整实现代码
import pandas as pd # 构造原始示例数据 df = pd.DataFrame({ 'id': [1, 1, 1, 1, 2, 2, 2, 2], 'stage': ['stage 1', 'stage 2', 'stage 4', 'stage 6', 'stage 2', 'stage 3', 'stage 5', 'stage 6'] }) # 1. 生成stage列的独热哑变量 stage_dummies = pd.get_dummies(df['stage'], dtype=int) # 2. 拼接id列与哑变量 temp_df = pd.concat([df['id'], stage_dummies], axis=1) # 3. 按id分组后对哑变量做累计求和,将大于0的值统一转为1 result = temp_df.groupby('id').cumsum().gt(0).astype(int).reset_index(drop=True) # 4. 回写id列到结果中 result.insert(loc=0, column='id', value=df['id']) # 查看输出结果 print(result)
实现逻辑说明
- 首先通过
pd.get_dummies将分类字段stage转为独热编码,每行仅当前对应的stage列值为1,其余列为0 - 按id分组后对所有哑变量列执行累计求和运算,只要分组内当前行及之前出现过对应stage,求和结果就会≥1
- 通过
gt(0).astype(int)将所有≥1的数值统一转为1,即可实现已出现过的stage值滚动继承为1的需求
内容的提问来源于stack exchange,提问作者Patelra95
相关产品推荐
相关产品推荐

