如何在Pandas DataFrame中计算指定列与最后一列的差值?
解决方法
你需要的是让所有列与某一特定列(比如最后一列)逐行计算差值,df.diff(axis=1)是计算相邻列的差值,确实不符合需求。这里有两种高效的实现方式:
方法一:利用sub()方法(推荐)
借助pandas的广播特性,直接让整个DataFrame与目标列做减法运算:
import pandas as pd # 构造示例数据 df = pd.DataFrame({'A': [1,2,3], 'B': [4,5,6], 'C': [7,8,9]}) # 获取最后一列作为基准列 base_col = df.iloc[:, -1] # 计算所有列与基准列的差值(保留所有列,基准列自身差值为0) diff_df = df.sub(base_col, axis=0) # 如果只需要非基准列的差值,可筛选列 # diff_df = df.iloc[:, :-1].sub(base_col, axis=0)
运行后输出(保留所有列的情况):
A B C 0 -6 -3 0 1 -6 -3 0 2 -6 -3 0
方法二:使用apply()逐行处理
如果需要更灵活的逻辑(比如自定义差值规则),可以用apply()逐行计算:
diff_df = df.apply(lambda row: row - row.iloc[-1], axis=1)
这个方法和上面的结果一致,但对于大型数据集,sub()的广播运算效率更高。
内容的提问来源于stack exchange,提问作者ddddd
相关产品推荐
相关产品推荐

