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

如何为Pandas DataFrame按指定数学规则生成Output列值?

给Pandas DataFrame按规则填充Output列

问题背景

已经用下面的代码创建了带A、B、C、D、Output列的DataFrame:

import numpy as np
import pandas as pd

data = np.random.randint(0,10,size=(10000,5))
df = pd.DataFrame(data, columns=['A', 'B', 'C','D','Output'])

df.head()

现在要按规则填Output列:

  • 要是A⁴ + B³ + C² + D % 2 == 0,Output就设为0
  • 不然就设为1

先说明个歧义点

原规则的写法有运算符优先级的问题:

  • 按Python默认优先级,会先算D%2,再和前面的A⁴+B³+C²加起来,判断总和是不是0——这种情况几乎只有A、B、C全是0,且D是偶数的时候才会触发,Output基本全是1,大概率不是你想要的。
  • 更合理的需求应该是判断A⁴+B³+C²+D的总和是不是偶数(也就是(A⁴+B³+C²+D)%2 ==0),下面分别给两种情况的实现:

情况1:严格按字面规则来

df['Output'] = np.where((df['A']**4 + df['B']**3 + df['C']**2 + df['D']%2) == 0, 0, 1)

情况2:判断总和的奇偶性(推荐)

这里有个小技巧:整数的任意正整数次幂,奇偶性和原数完全一样——比如偶数的多少次方都是偶数,奇数的多少次方都是奇数。所以A⁴的奇偶性等于A,B³等于B,C²等于C,总和的奇偶性直接等于A+B+C+D的奇偶性,计算起来更快。

写法1:直接算完整表达式

df['Output'] = ((df['A']**4 + df['B']**3 + df['C']**2 + df['D']) % 2).astype(int)

写法2:简化奇偶计算(性能更好)

df['Output'] = ((df['A'] + df['B'] + df['C'] + df['D']) % 2).astype(int)

要是非要用apply(不推荐,慢)

如果习惯用逐行处理的方式,也可以这么写,但10000行的话速度会比矢量化慢很多:

def fill_output(row):
    total = row['A']**4 + row['B']**3 + row['C']**2 + row['D']
    return 0 if total % 2 == 0 else 1

df['Output'] = df.apply(fill_output, axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 14:06:40