如何对依赖前一行取值的Pandas代码实现无apply向量化处理
Pandas 向量化实现需求方案
完全可以不用遍历、不用apply,纯向量化操作即可实现,性能远高于iterrows迭代方案。
核心实现逻辑
按ids分组后通过移位+累积求和判断当前行之前是否出现过ftest=1的记录,刚好匹配你的需求:
- 移位操作将
ftest的值往后偏移一行,保证首次出现ftest=1的行不会被自己命中 - 累积求和后只要结果大于0,说明当前行之前已经出现过
ftest=1,标记为1即可
实现代码
id_df['has_hist'] = ( id_df.groupby('ids')['ftest'] .shift(1) .fillna(0) .groupby(id_df['ids']) .cumsum() .gt(0) .astype(int) )
逻辑验证
我们可以用测试用例验证和你原有迭代逻辑完全一致:
测试输入数据:
| ids | ftest | 预期has_hist |
|---|---|---|
| 1 | 0 | 0 |
| 1 | 1 | 0 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
| 2 | 1 | 0 |
| 2 | 0 | 1 |
运行上述向量化代码后输出的has_hist和预期完全匹配。
内容的提问来源于stack exchange,提问作者MSS
相关产品推荐
相关产品推荐

