如何在pandas中实现Excel函数IF(H3>I3,C2,0)并倒序标注出现次数
Pandas 实现方案
逻辑说明
你提到的Excel公式IF(H3>I3,C2,0)对应规则:当前行H列值大于当前行I列值时,J列取上一行C列的值,否则取0,我们基于该规则完成列生成和逆序计数。
步骤1:生成J列基础值
假设你的DataFrame中对应Excel H、I、C列的列名分别为H_col、I_col、C_col,可替换为你实际的列名:
import pandas as pd # 初始化J列为0 df['J'] = 0 # 匹配IF条件,满足的行赋值为上一行C列的值 condition = df['H_col'] > df['I_col'] df.loc[condition, 'J'] = df['C_col'].shift(1)
步骤2:从下到上统计满足条件的出现次数
先将DataFrame逆序,对满足J!=0的行做累计计数,再还原原顺序即可:
# 逆序DataFrame并重置索引避免错位 df_rev = df[::-1].reset_index(drop=True) # 累计计数,仅满足条件的行保留计数值,其余行计为0 df_rev['occur_count'] = (df_rev['J'] != 0).cumsum() df_rev['occur_count'] = df_rev['occur_count'].where(df_rev['J'] != 0, 0) # 还原为原顺序 df = df_rev[::-1].reset_index(drop=True)
最终occur_count列就是你要的标记值:最下方首次出现的满足条件行标记为1,向上依次递增为2、3,不满足条件的行标记为0。
注意事项
- 运行代码前如果你的DataFrame不是默认连续整数索引,建议先执行
df = df.reset_index(drop=True),避免行错位 - 如果需要把计数和J列值合并,可以自行修改赋值逻辑,比如
df.loc[df['J']!=0, 'J'] = df['J'].astype(str) + '_第' + df['occur_count'].astype(str) + '次'
内容的提问来源于stack exchange,提问作者ragendthsfdc pk
相关产品推荐
相关产品推荐

