如何在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
相关产品推荐
相关产品推荐

