如何用Python一行代码基于DataFrame列a的三个条件生成列c?
一行代码实现多条件生成新列
这题我熟!用numpy的np.select()就能完美匹配你的需求,直接把三个条件和对应计算逻辑传进去,一行代码搞定,完全符合Python简洁风格:
import pandas as pd import numpy as np # 假设你的DataFrame是df,直接生成列c df['c'] = np.select([df['a'].diff() > 0, df['a'].diff() < 0, df['a'].diff() == 0], [df['b'].shift() + df['b'], df['b'].shift() - df['b'], df['b'].shift()])
代码细节解释:
np.select()的第一个参数是条件列表,按顺序对应第二个参数的结果列表,满足哪个条件就取对应位置的计算结果- 每个条件与结果一一对应:
- 当
a.diff() > 0时,取b.shift() + b作为c的值 - 当
a.diff() < 0时,取b.shift() - b - 当
a.diff() == 0时,直接取b.shift()
- 当
- 注意:
diff()和shift()会让第一行结果为NaN,这是正常现象——因为没有前一行数据可以用来计算
示例验证:
我们构造一个测试用DataFrame:
df = pd.DataFrame({'a': [1,3,3,2,4], 'b': [10,20,30,40,50]})
运行代码后,df['c']的结果为:
0 NaN 1 30.0 # 3-1>0 → 10+20 2 20.0 # 3-3=0 → 20 3 -20.0 # 2-3<0 → 30-40 4 90.0 #4-2>0 →40+50
完全符合你的要求!
内容的提问来源于stack exchange,提问作者KOB
相关产品推荐
相关产品推荐

