You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas中使用两行值对列应用自定义函数?

解决方案

方法一:直接行索引运算(最简洁高效)

因为你的DataFrame只有两行,直接提取两行数据做向量化运算就行,这是Pandas里效率最高的方式:

import pandas as pd
df = pd.DataFrame({"x": [1, 2], "z": [2, 6], "i": [3, 12], "j": [4, 20], "y": [5, 30]})

# 直接取第二行和第一行计算
result = (df.iloc[1] - df.iloc[0]) / df.iloc[1]
# 保留三位小数对齐输出
print(result.round(3))

输出结果:

x    0.500
z    0.667
i    0.750
j    0.800
y    0.833
dtype: float64

方法二:用apply处理单列

如果一定要用自定义函数的形式,apply会把每一列作为Series传入函数,你直接从Series里取两行值计算即可:

def calculate_column(col):
    return (col.iloc[1] - col.iloc[0]) / col.iloc[1]

result = df.apply(calculate_column, axis=0)
print(result.round(3))

也可以用lambda简化成一行:

result = df.apply(lambda col: (col.iloc[1] - col.iloc[0])/col.iloc[1], axis=0)

补充:基于diff的改造方案

你之前用的df.diff()其实可以继续加工,diff()得到的是第二行减第一行的结果,再除以第二行的值就符合要求了:

result = df.diff().iloc[1] / df.iloc[1]

为什么你的尝试失败?

  • 你写的df.apply(lambda x,y: (x + y)/y, axis=0)报错,是因为apply给lambda只传一个参数(当前列的Series),没法接收两个参数。
  • 单独用df.diff()只能得到差值,缺少除以第二行的步骤,所以不符合预期。

内容的提问来源于stack exchange,提问作者Juan Ossa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 08:00:54