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

如何用df.loc为Pandas DataFrame添加多条件判断列?

用df.loc添加条件标记列的正确实现

错误代码分析

  1. 尝试代码1问题:
    你把赋值操作的结果(字符串'Yes')直接赋值给了df_new,导致df_new不是修改后的DataFrame,而是'Yes'。同时仅给符合条件的行设置了'Yes',未满足条件的行的'Ind'列会是NaN,不符合预期。

  2. 尝试代码2问题:
    loc的语法使用错误,第二个参数是列索引,你传入了行级的布尔掩码,这会导致列筛选逻辑混乱(布尔掩码是用来筛选行的,不是列),最终无法生成正确的标记列。

正确实现方法

方法1:先初始化默认值,再用loc更新符合条件的行(推荐)

这种方式逻辑清晰,完全贴合df.loc的使用场景:

import pandas as pd
from io import StringIO

csvfile_now = StringIO(
"""
Name    A   B   C   D
Mike    5   11  50  10
Kate    60  9   20  19
Jane    11  14  20  12
""")

df = pd.read_csv(csvfile_now, sep='\t', engine='python')

# 初始化新列'Ind'为默认值'No'
df['Ind'] = 'No'
# 使用loc定位满足条件的行,将'Ind'列设为'Yes'
df.loc[(df['B'] > df['A'] * 0.5) & (df['D'] > df['C'] * 0.5), 'Ind'] = 'Yes'

print(df)

运行结果:

Name   A   B   C   D  Ind
0  Mike   5  11  50  10   No
1  Kate  60   9  20  19   No
2  Jane  11  14  20  12  Yes

方法2:结合np.where与loc(可选)

如果不想提前初始化列,也可以用np.where生成标记值,再通过loc赋值:

import numpy as np
# 直接生成'Ind'列的所有值
df.loc[:, 'Ind'] = np.where((df['B'] > df['A'] * 0.5) & (df['D'] > df['C'] * 0.5), 'Yes', 'No')

结果说明

  • Mike:B=11满足>5*0.5,但D=10不满足>50*0.5,标记为No
  • Kate:B=9不满足>60*0.5,即使D=19满足条件,整体仍标记为No
  • Jane:B=14满足>11*0.5且D=12满足>20*0.5,标记为Yes

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 20:47:35