如何在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
相关产品推荐
相关产品推荐

