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

如何在数据集中按行将每列除以其前一列(非硬编码实现)

按行计算列间比值(当前列除以前一列)

以下是不硬编码列名的实现方案,支持自动适配任意数量的数值列:

R 实现

高效矩阵操作法

假设你的数据集名为df,DATE为日期列,其余为数值列:

# 提取所有数值列
num_cols <- df[, !names(df) %in% "DATE"]
# 计算当前列与前一列的比值,第一列填充NA
ratio_cols <- cbind(NA, num_cols[, -1] / num_cols[, -ncol(num_cols)])
# 对齐列名并合并回日期列
colnames(ratio_cols) <- colnames(num_cols)
result_df <- cbind(df["DATE"], ratio_cols)

tidyverse 行操作法

library(dplyr)

result_df <- df %>%
  rowwise() %>%
  mutate(across(-DATE, ~ . / get(as.character(as.numeric(cur_column()) - 1)))) %>%
  ungroup() %>%
  mutate(across(matches("^0$"), ~ NA_real_))

Python Pandas 实现

假设你的数据集名为df:

import pandas as pd

# 提取数值列(排除DATE列)
num_cols = df.drop("DATE", axis=1)
# 按行将当前列除以前一列,shift(axis=1)自动实现列左移补NaN
ratio_cols = num_cols.div(num_cols.shift(axis=1), axis=0)
# 合并回日期列
result_df = pd.concat([df["DATE"], ratio_cols], axis=1)

运行后示例数据的输出结果为:

DATE         0     1      2
07/01/2022  NaN  0.80  0.75
08/01/2022  NaN  0.75  0.67
09/01/2022  NaN  1.00  0.50

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 13:12:07