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

如何在Pandas中基于非NaN的b列计算a列百分比变化生成新列c

问题场景

现有Pandas DataFrame:

import pandas as pd
import numpy as np
df = pd.DataFrame({'a': [10, 11, 20, 80, 1, 22], 'b':['x', np.nan, 'x', np.nan, np.nan, 'x']})

需要生成新列c,规则如下:

  • 仅当b列不为NaN时,计算当前a值与前一个b非NaN的a值的百分比变化(公式:(当前值 - 前值)/前值 * 100)
  • 其余位置填充NaN

预期输出:

a    b     c
0  10    x     NaN
1  11  NaN     NaN
2  20    x     100
3  80  NaN     NaN
4   1  NaN     NaN
5  22    x     10
解决方案

直接通过筛选有效行计算百分比变化+索引对齐就能实现需求,代码如下:

# 筛选b非NaN的行,计算a列的百分比变化(转成百分比格式)
filtered_a = df.loc[df.b.notna(), 'a']
pct_result = filtered_a.pct_change() * 100

# 将计算结果按原DataFrame索引对齐,自动填充NaN到无效位置
df['c'] = pct_result.reindex(df.index)

说明

之前用df.loc[df.b.notna(), 'a'].values失败的原因是:提取values后得到的是无索引的数组,无法对应回原DataFrame的行位置。而用reindex可以保留计算结果的原始索引,和原DataFrame对齐后,自然把非有效行的位置填充为NaN。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 07:12:05