如何基于列表更新Pandas DataFrame的Status列?(Python)
问题:更新DataFrame中缺陷ID对应的Status值
给定代码与数据
import pandas as pd data = [{'car' :'audi','id':'ab','year':2001,'wheel':4}, {'car' :'honda','id':'aa','year':2002,'wheel':15}, {'car' :'tesla','id':'aaa','year':2003,'wheel':5}] keys=['a','aa','aaa','avaa','2ffa']
目标DataFrame初始状态
| Car | ID | Year | Status | Wheels |
|---|---|---|---|---|
| Audi | ab | 2001 | OK | 4 |
| Honda | baaa | 2002 | OK | 4 |
| Tesla | aaa | 2003 | OK | 4 |
| Tesla | avaa | 2023 | OK | 4 |
已知keys列表中的ID为缺陷ID,需将DataFrame中ID属于该列表的行的Status列值从“OK”更新为“Defective”,实现方法如下:
方法一:使用loc结合isin精准更新
# 构造DataFrame并补全缺失列(匹配目标表格结构) df = pd.DataFrame(data) df['Status'] = 'OK' df['Wheels'] = 4 # 核心更新逻辑:筛选ID在keys中的行,修改Status值 df.loc[df['id'].isin(keys), 'Status'] = 'Defective'
逻辑说明:
df['id'].isin(keys)生成布尔索引,标记出ID列值存在于缺陷列表的行df.loc[布尔索引, 'Status']定位到目标行的Status列,批量赋值为Defective
方法二:使用numpy.where批量赋值
import numpy as np # 构造DataFrame并补全列(同上) df = pd.DataFrame(data) df['Status'] = 'OK' df['Wheels'] = 4 # 用where条件批量替换Status值 df['Status'] = np.where(df['id'].isin(keys), 'Defective', df['Status'])
逻辑说明:
numpy.where根据条件判断:满足ID在keys中的行赋值为Defective,不满足的保留原Status值
更新后的DataFrame结果
| Car | ID | Year | Status | Wheels |
|---|---|---|---|---|
| Audi | ab | 2001 | OK | 4 |
| Honda | baaa | 2002 | OK | 4 |
| Tesla | aaa | 2003 | Defective | 4 |
| Tesla | avaa | 2023 | Defective | 4 |
内容的提问来源于stack exchange,提问作者Greenyuno
相关产品推荐
相关产品推荐

