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

如何在Pandas中仅对布尔值为True的行计算col1的pct_change()?

问题:基于布尔列过滤计算指定行的pct_change()

我有一个包含布尔列的Pandas DataFrame,这个布尔列是通过条件判断生成的:

import pandas as pd
df = pd.DataFrame({'col1': [1,2,3,2.5,5,2]})
df['bool'] = df['col1'] >= 3

生成的DataFrame结构如下:

col1bool
01.0False
12.0False
23.0True
32.5False
45.0True
52.0False

现在我需要实现:当bool列值为True时,计算col1列的pct_change();当bool列值为False时,返回NaN。期望输出如下:

col1pct_change
01.0NaN
12.0NaN
23.0-0.169
32.5NaN
45.0-0.400
52.0NaN

请问实现这个需求的最优方法是什么?


最优实现方法

我推荐用筛选目标行计算后再映射回原表的方式,这是效率最高且逻辑最清晰的做法,完美匹配你的需求:

先看完整代码:

import pandas as pd

# 初始化你的DataFrame
df = pd.DataFrame({'col1': [1,2,3,2.5,5,2]})
df['bool'] = df['col1'] >= 3

# 第一步:只取出bool为True的col1值,计算它们的百分比变化
true_col1 = df.loc[df['bool'], 'col1']
pct_result = true_col1.pct_change()

# 第二步:把计算结果赋值回原表,非True的行自动填充NaN
df['pct_change'] = pct_result

# 可选:按照示例保留三位小数
df['pct_change'] = df['pct_change'].round(3)

# 查看最终结果
print(df[['col1', 'pct_change']])

方法优势说明

  1. 高效省资源:只对需要计算的行(bool为True的行)执行pct_change(),避免了对整个列计算后再过滤的冗余操作,处理大数据量时优势更明显。
  2. 简洁易维护:利用Pandas的索引自动对齐特性,直接将计算结果赋值回原表即可,不需要写循环或复杂的条件判断,代码逻辑一目了然。
  3. 灵活易扩展:如果后续需要调整布尔筛选条件,只需要修改df.loc的筛选规则,核心计算逻辑完全不需要变动。

运行代码后得到的结果就和你期望的完全一致啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 23:57:47