如何修改Pandas行计算函数,指定reversed(row)仅查询最后n列
Pandas 年度值计算自定义函数优化方案
修改后函数逻辑
新增steps入参控制计算范围,仅取行末尾指定数量的季度列参与计算,保留原有行索引对应的计算规则:
- 行索引为
People、AA、BB:倒序遍历指定范围列,返回第一个大于0的季度值 - 行索引为
MM、$$:返回指定范围列的所有季度值总和
完整函数代码
def compute_end_year_value(row, steps: int): # 限制steps最大值不超过当前行可用列数,避免索引报错 valid_steps = min(steps, len(row)) # 提取行末尾valid_steps个列作为计算范围 calc_series = row.iloc[-valid_steps:] if row.name in ("People", "AA", "BB"): # 倒序查找第一个大于0的值 for val in reversed(calc_series): if val > 0: return val # 无符合条件值返回0 return 0 elif row.name in ("MM", "$$"): return calc_series.sum() # 其他行索引可自定义返回规则,这里默认返回空值 return None
调用示例
计算2020年全年总计(取前4个季度值)
假设你的DataFrame前4列依次为2020Q1、2020Q2、2020Q3、2020Q4,调用时传入steps=4即可:
df["2020年总计"] = df.apply(compute_end_year_value, axis=1, steps=4)
计算2021年中总计(取前2个季度值)
在新增2021Q1、2021Q2列后,调用时传入steps=2即可仅统计这两列的值:
df["2021年中总计"] = df.apply(compute_end_year_value, axis=1, steps=2)
注意事项
如果你的季度列没有按时间顺序从左到右排列,需要先按季度周期对列进行排序后再执行计算,避免计算范围错位。
内容的提问来源于stack exchange,提问作者GiveGet_15
相关产品推荐
相关产品推荐

