如何在pandas中基于Stock=100的Rate值向下填充Discount列
实现方法
Python Pandas 方案
核心逻辑:先给Stock=100的锚点行计算Discount值,其余行留空,再用向下填充方法补全空值。
import pandas as pd import numpy as np # 读取/构造数据集 df = pd.DataFrame({ "Name": ["AB", "CD", "EF", "GH", "IJ", "KL"], "Rate": [32.8, 56.7, 34.7, 33.1, 44.5, 33.6], "Stock": [0, 100, 0, 0, 100, 0] }) # 仅锚点行计算Discount,其余设为NaN df["Discount"] = np.where(df["Stock"] == 100, df["Rate"] * 0.95, np.nan) # 向下填充空值,保留两位小数 df["Discount"] = df["Discount"].ffill().round(2) print(df)
Excel 方案
假设你的数据从A1单元格开始存储,表头依次为A1=Name、B1=Rate、C1=Stock、D1=Discount:
- D2单元格(对应AB行)留空,因为上方没有有效锚点
- D3单元格输入公式:
=IF(C3=100,B3*0.95,D2) - 按住D3单元格右下角的填充柄,向下拖拽到最后一行即可完成填充
公式逻辑:如果当前行Stock为100,就用当前行Rate计算折扣,否则直接沿用上方单元格的Discount值,自动实现锚点值向下传递的效果。
内容的提问来源于stack exchange,提问作者Struggling brat
相关产品推荐
相关产品推荐

