如何仅在满足指定条件时修改Pandas DataFrame的Val列值?
最优实现方法
可以利用 pandas 的布尔索引结合矢量化操作来高效实现需求,这种方法避免了循环遍历,性能更优,代码也更简洁:
步骤1:构造原始 DataFrame
import pandas as pd data = { 'A': [1, 5, 2, 4], 'Cond': [True, False, False, False], 'Val': [0.8, 0.8, 0.6, 0.5] } df = pd.DataFrame(data)
步骤2:应用条件修改
# 定义筛选条件:Cond为False 且 Val>0.55 mask = (df['Cond'] == False) & (df['Val'] > 0.55) # 对满足条件的行,将Val调整为比原数小的最近0.1倍数(匹配你的示例结果) df.loc[mask, 'Val'] = (df.loc[mask, 'Val'] // 0.1 - 1) * 0.1
结果验证
执行后得到的 DataFrame 如下:
A Cond Val 0 1 True 0.8 1 5 False 0.7 2 2 False 0.5 3 4 False 0.5
方法优势
- 矢量化操作:pandas 的底层优化让这种批量操作比逐行循环快几个数量级,尤其适合大尺寸的 DataFrame。
- 可读性强:通过布尔索引(
mask)清晰圈定需要修改的行,逻辑一目了然,维护成本低。
如果你的“截断”是指常规的保留一位小数截断(例如 0.85→0.8),只需把修改逻辑替换为:
df.loc[mask, 'Val'] = (df.loc[mask, 'Val'] * 10).astype(int) / 10
内容的提问来源于stack exchange,提问作者Cranjis
相关产品推荐
相关产品推荐

