更新Pandas DataFrame多单元格值时报重索引错误如何解决?
报错原因
你编写的索引语法不符合pandas规范:
- 直接在
df[]的方括号内使用逗号分隔两个布尔条件,会被pandas解析为MultiIndex索引操作,你的数据集不存在对应的MultiIndex,因此触发ValueError: Cannot reindex from a duplicate axis报错 - 你的逻辑也存在问题:按需求你需要给所有Type为B的行按顺序拼接序号,不需要单独匹配Value值逐个赋值
正确实现代码
你可以通过cumcount()方法批量给Type为B的行生成序号,直接完成赋值:
import pandas as pd # 构建原始数据集 df = pd.DataFrame({'ID': [1,2,3,4], 'Type': ['A', 'B', 'B', 'B'], 'Value': [100, 200, 201, 120]}) # 筛选Type为B的行,按顺序拼接序号 df.loc[df['Type'] == 'B', 'Type'] = 'B' + (df[df['Type'] == 'B'].cumcount() + 1).astype(str) # 输出验证结果 print(df)
运行后得到的结果和你预期的一致:
ID Type Value 0 1 A 100 1 2 B1 200 2 3 B2 201 3 4 B3 120
补充:单条修改的正确写法
如果你确实需要单独修改满足某条件的单条行,正确的.loc写法如下,不会触发报错:
# 把Type为B且Value为200的行的Type改为B1 df.loc[(df['Type'] == 'B') & (df['Value'] == 200), 'Type'] = 'B1'
内容的提问来源于stack exchange,提问作者Beta
相关产品推荐
相关产品推荐

