如何在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_reserve | cf_res_g_formatted |
|---|---|
| 1.202.170,21 | 11.448,82 |
| 1.190.721,39 | 15.420,89 |
| 1.175.300,50 | 15.300,50 |
| 1.160.000,00 |
注:最后一行因无后续行数据,结果为空(对应原始计算值为NaN)
内容的提问来源于stack exchange,提问作者Zefanya Simijaya
相关产品推荐
相关产品推荐

