Pandas如何根据DataFrame其他列的条件计算生成新列值
Pandas按日期区间计算新列实现方案
首先你需要先确保Date列已转换为pandas标准日期类型,否则无法正确提取月份做判断,转换代码如下:
import pandas as pd import numpy as np # 日期类型转换,若你的Date列已经是datetime类型可跳过这步 df['Date'] = pd.to_datetime(df['Date'])
以下提供两种生产环境常用的实现方式,均为向量化运算,执行效率远高于逐行遍历:
- 方法1:
numpy.where写法简洁,执行效率最高
df['Price_new'] = np.where( # 判断条件:日期月份在4-10月区间 df['Date'].dt.month.between(4, 10), # 满足条件时Price加0.01 df['Price'] + 0.01, # 不满足条件(即11月-次年3月)时Price加0.12 df['Price'] + 0.12 )
- 方法2:pandas原生
loc索引赋值,逻辑直观易排查
# 先给所有行赋11月-次年3月区间的默认值 df['Price_new'] = df['Price'] + 0.12 # 再筛选出4-10月的行,覆盖为对应区间的值 df.loc[df['Date'].dt.month.between(4, 10), 'Price_new'] = df['Price'] + 0.01
注意:你问题里写的第一段赋值代码存在笔误:
df[Price]缺少列名的引号包裹,正确写法为df['Price'],否则运行时会把Price识别为未定义变量直接报错。
- 补充说明:不要使用
df.apply逐行做判断的写法,数据量较大时运行速度会比上述两种向量化实现慢几十到上百倍。
内容的提问来源于stack exchange,提问作者noobcoder
相关产品推荐
相关产品推荐

