基于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
相关产品推荐
相关产品推荐

