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

Python:基于days列多条件生成新列的方法及if替代方案

DataFrame条件列创建实现及替代方案

先明确需求逻辑

根据days列的值生成新列new_colum:

  • 当days < 180时,值为'y'
  • 当180 < days < 365时,值为'd'
  • 当days ≥ 365时,值为'h'

一、用if条件结合apply实现

先修正你原代码的语法问题:elif( days >180 & < 365)是错误写法,Python中正确的区间判断要么用链式比较180 < day < 365,要么用逻辑与(day > 180) & (day < 365)(pandas中布尔运算需加括号,避免优先级问题)。

具体代码:

import pandas as pd

# 构造示例DataFrame
df = pd.DataFrame({'days': [190, 567, 55]})

# 定义条件判断函数
def get_new_value(day):
    if day < 180:
        return 'y'
    elif 180 < day < 365:
        return 'd'
    else:
        return 'h'

# 应用函数生成新列
df['new_colum'] = df['days'].apply(get_new_value)

运行后结果:

daysnew_colum
190d
567h
55y

这种方法逻辑直观,但数据量较大时,apply的效率不如向量化操作。


二、更高效的替代方案

1. 使用numpy.select(推荐大数据量场景)

np.select是向量化操作,直接对整列进行条件判断,效率远高于apply:

import pandas as pd
import numpy as np

df = pd.DataFrame({'days': [190, 567, 55]})

# 定义条件列表和对应结果列表
conditions = [
    df['days'] < 180,
    (df['days'] > 180) & (df['days'] < 365),
    df['days'] >= 365
]
choices = ['y', 'd', 'h']

# 生成新列
df['new_colum'] = np.select(conditions, choices, default='h')

np.select会按顺序匹配第一个满足的条件,default参数可兜底处理未匹配到的情况。

2. 使用pd.cut(适合区间划分场景)

如果逻辑是基于连续区间划分,pd.cut是更简洁的选择:

import pandas as pd

df = pd.DataFrame({'days': [190, 567, 55]})

# 定义区间边界和对应标签
bins = [-float('inf'), 180, 365, float('inf')]
labels = ['y', 'd', 'h']

# 生成新列,right=False设置区间左闭右开,匹配需求
df['new_colum'] = pd.cut(df['days'], bins=bins, labels=labels, right=False)

right=False让区间变为[-inf,180)、[180,365)、[365, inf),正好对应我们的条件逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 00:18:30