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

如何在Pandas DataFrame中按多条件判断生成good_day标识列

错误原因

  1. 原有代码是分别给满足单个条件的行赋值1,实现的是「满足任意一个条件就标记为1」的或逻辑,不符合要求的「三个条件同时满足才标记为1」的且逻辑
  2. 最后一行df['good_day'] = df.where(df['temperatur'].between(15, 25), 1)写法错误,直接将整行DataFrame的值赋值给了good_day列,导致输出结果异常

正确实现

推荐两种常见写法:

写法1:布尔值直接转整数(最简洁)

import pandas as pd

d = {'sunshine': [8, 9, 6, 5],  
     'rain': [2, 4, 0, 8],      
     'temperatur': [22, 32, -12, 4],
     'id': [1, 2, 3, 4]}
df = pd.DataFrame(data=d)

# *注意三个判断条件都需要加括号,避免Python运算符优先级问题导致报错
df['good_day'] = (
    (df['sunshine'] >= 8) & 
    (df['rain'] <= 3) & 
    (df['temperatur'].between(15, 25))
).astype(int)

print(df)

写法2:loc赋值(逻辑更直观)

df['good_day'] = 0
# 先构造同时满足三个条件的掩码
mask = (df['sunshine'] >= 8) & (df['rain'] <= 3) & (df['temperatur'].between(15,25))
# 仅给满足条件的行赋值1
df.loc[mask, 'good_day'] = 1

输出结果

sunshine  rain  temperatur  id  good_day
0         8     2          22   1         1
1         9     4          32   2         0
2         6     0         -12   3         0
3         5     8           4   4         0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 01:24:09