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

基于DataFrame列条件生成新列df["c"]的技术实现需求

解决DataFrame生成新列c的问题

嘿,我来帮你搞定这个需求!我们需要根据a和b的关系生成新列c,规则很明确:当b落在a ± 0.5a(也就是0.5倍a到1.5倍a之间)的区间里时,c取a的值;超出这个区间就取b的值。下面是具体的实现步骤和代码:

步骤1:构造原始DataFrame

首先我们先把你给的数据转换成pandas的DataFrame:

import pandas as pd
import numpy as np

# 初始化数据
data = {'a': [100, 30, 90, 200],
        'b': [90, 117, 99, 94]}
df = pd.DataFrame(data)

步骤2:生成新列c

这里推荐用numpy.where来实现,它的效率很高,适合处理大规模数据:

# 核心逻辑:判断b是否在0.5a到1.5a之间,满足则取a,否则取b
df['c'] = np.where(
    (df['b'] >= 0.5 * df['a']) & (df['b'] <= 1.5 * df['a']),
    df['a'],
    df['b']
)

如果你的数据集很小,也可以用pandas的apply方法(虽然效率稍低,但代码更直观):

df['c'] = df.apply(
    lambda row: row['a'] if (0.5*row['a'] <= row['b'] <= 1.5*row['a']) else row['b'],
    axis=1
)

步骤3:验证结果

运行代码后,打印df就能得到你想要的结果:

a    b    c
0  100   90  100
1   30  117  117
2   90   99   90
3  200   94   94

我们来逐个验证一下:

  • 第一行:a=100,0.5100=50,1.5100=150,b=90在区间内,所以c=100 ✔️
  • 第二行:a=30,0.530=15,1.530=45,b=117超出区间,所以c=117 ✔️
  • 第三行:a=90,0.590=45,1.590=135,b=99在区间内,所以c=90 ✔️
  • 第四行:a=200,0.5200=100,1.5200=300,b=94低于100,超出区间,所以c=94 ✔️

完全符合你的预期要求!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:26:54