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

如何在Python DataFrame中实现列内前值减后值计算?

实现步骤

1. 数据预处理:将格式化字符串转为数值型

原列的数值格式是千分位用点分隔、小数用逗号分隔的字符串,必须先转换为数值类型才能执行计算:

import pandas as pd

# 示例输入数据
data = {
    'Gross_reserve': ['1.202.170,21', '1.190.721,39', '1.175.300,50', '1.160.000,00']
}
df = pd.DataFrame(data)

# 格式转换:移除千分位的点,把小数逗号替换为小数点,再转为float类型
df['Gross_reserve_num'] = df['Gross_reserve'].str.replace('.', '', regex=False).str.replace(',', '.').astype(float)

2. 计算前一行减后一行生成新列

用shift(-1)获取下一行的数值,直接执行减法运算即可得到目标结果:

df['cf_res_g'] = df['Gross_reserve_num'] - df['Gross_reserve_num'].shift(-1)

3. 还原结果格式(可选)

如果需要将计算结果转回和原列一致的千分位+逗号小数格式,可以自定义格式化函数:

def format_result(num):
    if pd.isna(num):
        return ''
    # 保留两位小数并拆分整数、小数部分
    num_str = f"{num:.2f}"
    integer_part, decimal_part = num_str.split('.')
    # 给整数部分添加千分位分隔(用点代替逗号)
    integer_part = '{:,}'.format(int(integer_part)).replace(',', '.')
    return f"{integer_part},{decimal_part}"

df['cf_res_g_formatted'] = df['cf_res_g'].apply(format_result)

最终结果展示

Gross_reservecf_res_g_formatted
1.202.170,2111.448,82
1.190.721,3915.420,89
1.175.300,5015.300,50
1.160.000,00

注:最后一行因无后续行数据,结果为空(对应原始计算值为NaN)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 18:30:43