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

Python Pandas计算Result列:其余MCond全为真且27、31列至少一个为真

你可以将原有计算Result列的代码替换为拆分两个判断逻辑的写法即可满足需求:

逻辑拆解

  • 首先筛选出除Mcond 27、Mcond 31之外的所有Mcond开头的列,判断这些列是否全部为True
  • 再判断Mcond 27和Mcond 31是否至少有一个为True
  • 两个条件同时满足时,Result为True,否则为False

修改后的代码

def function1(df, tf):
    
    df.loc[:, ('Mcond 1')] = df.A > df.A.shift(1)
    df.loc[:, ('Mcond 2')] = df.B < df.B.shift(1)
    df.loc[:, ('Mcond 3')] = df.C > df.D
    df.loc[:, ('Mcond 4')] = df.E > df.E.shift(1)
    df.loc[:, ('Mcond 5')] = df.F > df.F.shift(1)
    if tf == 'A1':
        df.loc[:, ('Mcond 27')] = df.consec5 == 1
    elif tf == 'B1':
        df.loc[:, ('Mcond 27')] = df.consec3 == 1
    elif tf == 'C1':
        df.loc[:, ('Mcond 27')] = True
    else:
        df.loc[:, ('Mcond 27')] = True
    df.loc[:, ('Mcond 31')] = df.consec2.rolling(3).sum() >= 1
    
    # 以下为修改后的Result计算逻辑
    # 筛选除27、31之外的所有Mcond列
    other_mcond_cols = df.columns[df.columns.str.startswith('Mcond') & ~df.columns.isin(['Mcond 27', 'Mcond 31'])]
    # 条件1:其余Mcond列全部为真
    all_other_true = df[other_mcond_cols].all(axis=1)
    # 条件2:27和31至少一个为真
    either_27_31_true = df['Mcond 27'] | df['Mcond 31']
    # 两个条件同时满足才为真
    df.loc[:, ('Result')] = all_other_true & either_27_31_true

    return df

注意:如果你的实际列名中Mcond和数字之间没有空格,请同步调整isin判断中的列名字符串即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:54:06