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

Python Pandas如何对含NaN的DataFrame计算逐行百分比差异

Pandas逐行增长率实现方案

实现逻辑

你需要的逐行增长率本质是每行中后一列相对前一列的变化率,计算公式为:(当前列值 - 前一列值) / 前一列值 * 100,仅当前列和前一列都不为空时计算,否则返回空值。可以直接用Pandas自带的pct_change方法实现。

完整代码

import pandas as pd
import numpy as np

# 构造示例DataFrame,你可以替换成自己的数据源
df = pd.DataFrame({
    'route': [1, 2, 3, 4],
    'col1': [np.nan, 9, 68, 9],
    'col2': [9, 48, 70, np.nan],
    'col3': [9, np.nan, 118, 9],
    'col4': [9, 118, 106, 9],
    'col5': [np.nan, np.nan, np.nan, 48]
})

# 提取所有需要计算的数值列
num_cols = [col for col in df.columns if col.startswith('col')]
# 逐行计算增长率,乘以100后保留两位小数
growth_df = df[num_cols].pct_change(axis=1, fill_method=None).mul(100).round(2)
# 拼接原route列得到最终结果
res_df = pd.concat([df['route'], growth_df], axis=1)

# 输出结果
print(res_df)

输出结果

运行上述代码得到的结果和你要求的格式完全匹配:

route  col1    col2   col3   col4    col5
0      1   NaN     NaN   0.00   0.00     NaN
1      2   NaN  433.33    NaN    NaN     NaN
2      3   NaN    2.94  68.57 -10.17     NaN
3      4   NaN     NaN    NaN   0.00  433.33

注:第一行col4的结果和你给出的示例有差异,是因为你提供的示例原数据第一行col3、col4均为9,按公式计算结果为0,属于示例笔误。第三行col4的-10.17和你示例的-10.16为四舍五入精度差异,可通过调整round的参数调整精度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 15:45:02