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

Pandas:如何在Lambda中加入多条件生成符合要求的Past_Minute列

Pandas生成Past_Minute列的解决方案

原始数据与需求

给定如下Pandas DataFrame:

import pandas as pd

df = pd.DataFrame({'Status':['Closed','Open', 'Open','Cancel','Closed','Cancel', 'Checkin', 'Open', 'Open', 'Checkin', 'Open'], 
                   'DELTA_TIME':[-3, -1, 0, 5, 55, 40, 70, 80, 90, 100, 44]})

需要生成新列Past_Minute,规则如下:

  • 当Status为Open或Checkin且DELTA_TIME<30时,值为空;
  • 当Status为Open或Checkin且30<DELTA_TIME<60时,值为'30 Mins Delay';
  • 当Status为Open或Checkin且60≤DELTA_TIME<90时,值为'60 Mins Delay';
  • 当Status为Open或Checkin且DELTA_TIME≥90时,值为'90 Mins Delay';
  • 其他情况值为空。

问题分析

你尝试的两种方法存在以下问题:

  1. loc方法:运算符优先级错误,未用括号分组逻辑条件,导致判断逻辑失效;
  2. Lambda方法:未加入Status过滤条件,非Open/Checkin的行被错误赋值。

正确实现方法

方法1:修正后的loc方法

核心是用括号将逻辑条件分组,避免运算符优先级冲突,先初始化空列再按规则赋值:

# 初始化新列为空字符串
df['Past_Minute'] = ''

# 按规则依次匹配赋值
df.loc[(df['Status'].isin(['Open', 'Checkin'])) & (df['DELTA_TIME'] > 30) & (df['DELTA_TIME'] < 60), 'Past_Minute'] = '30 Mins Delay'
df.loc[(df['Status'].isin(['Open', 'Checkin'])) & (df['DELTA_TIME'] >= 60) & (df['DELTA_TIME'] < 90), 'Past_Minute'] = '60 Mins Delay'
df.loc[(df['Status'].isin(['Open', 'Checkin'])) & (df['DELTA_TIME'] >= 90), 'Past_Minute'] = '90 Mins Delay'

方法2:修正后的Lambda方法

在lambda函数中先判断Status是否符合要求,再进行时间区间判断,不符合直接返回空值:

df['Past_Minute'] = df.apply(
    lambda row: '' if row['Status'] not in ['Open', 'Checkin'] else
                '' if row['DELTA_TIME'] < 30 else
                '30 Mins Delay' if 30 < row['DELTA_TIME'] < 60 else
                '60 Mins Delay' if 60 <= row['DELTA_TIME'] < 90 else
                '90 Mins Delay',
    axis=1
)

方法3:高效简洁的pd.cut方法

利用pd.cut批量处理区间划分,再通过mask过滤非目标Status的行:

# 定义区间边界和对应标签
bins = [-float('inf'), 30, 60, 90, float('inf')]
labels = ['', '30 Mins Delay', '60 Mins Delay', '90 Mins Delay']

# 生成初始区间值,再将非目标Status的行设为空
df['Past_Minute'] = pd.cut(df['DELTA_TIME'], bins=bins, labels=labels, include_lowest=True)
df.loc[~df['Status'].isin(['Open', 'Checkin']), 'Past_Minute'] = ''

验证结果

执行上述任意方法后,打印DataFrame可得到符合要求的结果:

Status  DELTA_TIME     Past_Minute
0     Closed          -3                
1       Open          -1                
2       Open           0                
3     Cancel           5                
4     Closed          55                
5     Cancel          40                
6    Checkin          70  60 Mins Delay
7       Open          80  60 Mins Delay
8       Open          90  90 Mins Delay
9    Checkin         100  90 Mins Delay
10      Open          44  30 Mins Delay

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 23:01:03