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

如何在Pandas中筛选指定行并基于其他列值修改原DataFrame?

解决方案

优先推荐:向量化操作(高效不遍历)

Pandas的核心优势是向量化运算,比逐行遍历效率高得多,完全不用循环就能实现你的需求,直接修改原DataFrame:

首先构造示例数据:

import pandas as pd

data = {
    'id': [1, 2, 3],
    'name': ['John', 'Jake', 'Jim'],
    'city': ['Berlin', 'Paris', 'Berlin'],
    'address': ['bla', 'bla', 'Club'],
    'is customer': ['', '', '']
}
df = pd.DataFrame(data)

list_of_customers = ["John","Jake"]

然后执行核心修改逻辑:

# 生成布尔掩码:筛选出city为Berlin且name在客户列表中的行
filter_mask = (df['city'] == 'Berlin') & (df['name'].isin(list_of_customers))
# 直接定位到符合条件的行和目标列,赋值为'True'
df.loc[filter_mask, 'is customer'] = 'True'

执行后原DataFrame就会变成你想要的结果,这种方法没有循环,处理大数据集时速度会快很多。


如果一定要逐行遍历(不推荐,仅作参考)

如果你因为特殊需求必须遍历行,可以用iterrows(),但要注意通过行索引来修改原DataFrame(因为iterrows()返回的是行的副本,直接修改row不会影响原DF):

for idx, row in df.iterrows():
    # 检查当前行的city和name条件
    if row['city'] == 'Berlin' and row['name'] in list_of_customers:
        # 通过索引定位修改原DF的目标列
        df.loc[idx, 'is customer'] = 'True'

这种方法适合小数据集,大数据集下速度会远低于向量化操作,所以优先用第一种方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 04:43:18