如何用Python Pandas的Apply函数实现列值与新列前值的比较
解决方案
实现思路
通过apply逐元素处理A列,利用可变对象维护前一个B值的状态,避免显式循环和loc操作,同时保证大数据集下的处理效率。
代码实现
import pandas as pd # 构造测试数据集 A = [0, 5, 1, 7, 0, 2, 1, 3, 0] df = pd.DataFrame(A, columns=['A']) # 用可变对象维护前一个B值的状态 state = [0] def compute_b(x): if x == 0: res = 0 state[0] = 0 else: res = max(x, state[0]) state[0] = res return res # 应用apply生成B列 df['B'] = df['A'].apply(compute_b) print(df)
输出结果
A B 0 0 0 1 5 5 2 1 5 3 7 7 4 0 0 5 2 2 6 1 2 7 3 3 8 0 0
说明
- 用列表
state存储前一个B值,因为列表是可变对象,可在apply的函数内部修改状态值; - 处理每个A值时:
- 若A为0,直接返回0并重置状态;
- 若A不为0,取当前A值与状态值的较大值作为B值,同时更新状态为该值;
- 该方案避免了显式循环和
loc操作,apply的底层实现优化能应对大规模数据集的处理需求。
内容的提问来源于stack exchange,提问作者Martingale
相关产品推荐
相关产品推荐

