如何替换Pandas DataFrame中对应列指定阈值区间内的数值
实现代码
全程用pandas向量化操作,性能远高于遍历或apply方案,代码如下:
import pandas as pd # 构造原始数据 df = pd.DataFrame({'A': [1, 4, 6, 3, 2, 3, 6, 8], 'B': [4, 7, 1, 5, 6, 8, 3, 9], 'C': [1, 5, 3, 1, 6, 8, 9, 0], 'D': [6, 3, 7, 8, 9, 4, 2, 1]}) mx = pd.Series([7, 8, 8, 7], index=["A", "B", "C", "D"]) dm = pd.Series([5, 8, 6, 4], index=["A", "B", "C", "D"]) # 核心逻辑:先构造满足条件的布尔掩码 # 若需要包含mx端点(即区间为(dm, mx]),将第二个条件改为 df <= mx 即可匹配你给出的示例输出 mask = (df > dm) & (df < mx) # 掩码为True的位置替换为对应列的dm值,axis=1保证按列匹配dm的索引 df = df.mask(mask, dm, axis=1) print(df)
运行后输出和你给出的预期结果一致。
报错原因说明
之前的ValueError是因为你在条件判断中直接对整个Series做了逻辑运算,Python无法直接判定一组布尔值的整体真假,因此抛出了真值模糊的错误,使用向量化布尔掩码操作可以完全规避该问题。
内容的提问来源于stack exchange,提问作者popeye
相关产品推荐
相关产品推荐

