如何在Pandas中依据指定双条件生成新列F
Pandas生成新列F的实现方法
原始数据
import pandas as pd df = pd.DataFrame({ 'Ruote': ['R1', 'R2', 'R3'], 'B': [115, 155, 155], 'C': [1, 1, 6], 'D': [150, 150, 150], 'E': [-35, 5, 5] })
目标效果(生成列F后)
Ruote B C D E F R1 115 1 150 -35 0 R2 155 1 150 5 1 R3 155 6 150 5 5
列F的生成规则
- 当
E <= 0时,F取值为0 - 当
E > 0时:- 若
C <= E,F取C的值 - 若
C > E,F取E的值
- 若
实现方案
方案一:嵌套numpy.where(推荐,矢量化高效)
这是处理这类条件判断最常用的矢量化方法,性能最优,适合大数据集:
import numpy as np df['F'] = np.where(df['E'] <= 0, 0, np.where(df['C'] <= df['E'], df['C'], df['E']))
方案二:行级apply函数(小数据集适用)
如果数据量不大,行级处理逻辑更直观:
def get_F_value(row): if row['E'] <= 0: return 0 return row['C'] if row['C'] <= row['E'] else row['E'] df['F'] = df.apply(get_F_value, axis=1)
方案三:mask+where组合写法
用Pandas的Series方法链式处理,逻辑清晰:
df['F'] = df['C'].where(df['C'] <= df['E'], df['E']).mask(df['E'] <= 0, 0)
内容的提问来源于stack exchange,提问作者user22547
相关产品推荐
相关产品推荐

