如何用lambda函数获取下一行单元格值并完成指定除法计算?
解决方案:用Lambda实现DataFrame行间Val2的除法计算
首先构造示例DataFrame:
import pandas as pd data = {'Val1': [48, 156, 61, 12, 64], 'Val2': [21, 45, 54, 79, 45]} DF = pd.DataFrame(data)
你之前的代码DF.apply(lambda x: x[1].val2, axis=1)无效的原因很明确:当axis=1时,apply传入lambda的x是当前行的Series对象,x[1]只是当前行索引为1的元素(即Val2的值),根本无法访问下一行数据,逻辑完全错误。
要在lambda里实现当前行Val2除以下一行Val2,且无需新建偏移列,可以利用行索引定位下一行数据,代码如下:
DF["Output"] = DF.apply(lambda row: row['Val2'] / DF.loc[row.name + 1, 'Val2'] if row.name < len(DF)-1 else None, axis=1)
代码说明:
row.name获取当前行的索引(默认是连续整数索引)- 通过
row.name < len(DF)-1判断排除最后一行,避免索引越界 - 非最后一行用
DF.loc[row.name + 1, 'Val2']取到下一行的Val2值,再和当前行Val2做除法 - 最后一行设为
None,满足留空需求
运行后得到的结果:
| Val1 | Val2 | Output |
|---|---|---|
| 48 | 21 | 0.466667 |
| 156 | 45 | 0.833333 |
| 61 | 54 | 0.683544 |
| 12 | 79 | 1.755556 |
| 64 | 45 | NaN |
注:如果你的DataFrame索引不是连续整数,需要先执行
DF = DF.reset_index(drop=True)重置索引,否则索引定位会出错。
内容的提问来源于stack exchange,提问作者TourEiffel
相关产品推荐
相关产品推荐

