Pandas替换值时因重复轴引发ValueError的解决求助
数据集指标同步与合并问题修复
原始数据
原始数据集df结构如下:
N T IND_N IND_T 0 John Mark 1 0 1 Mike John 2 1 2 Stephan Simon 1 0 3 Laura Stephan 1 1 4 Matt Simon 3 0 5 Simon Joey 0 2
拆分后的子集
将df拆分为两个子集:
- df1(保留原指标):
N T IND_N IND_T 0 John Mark 1 0 1 Stephan Simon 1 0 2 Simon Joey 0 2
- df2(指标替换为-1):
N T IND_N IND_T 0 Laura Stephan -1 -1 1 Matt Simon -1 -1 2 Mike John -1 -1
目标输出
需要将df2中与df1共有的节点指标替换为df1的原指标,合并后得到df_out:
N T IND_N IND_T 0 John Mark 1 0 1 Stephan Simon 1 0 2 Simon Joey 0 2 3 Laura Stephan -1 1 4 Matt Simon -1 0 5 Mike John -1 1
遇到的问题
参考方案时触发错误:
ValueError: cannot reindex from a duplicate axis
尝试修改代码:
temp = df_unlabel[values] temp.update(df_label[values].set_index(col, inplace=True))
但结果未保留哑值,所有指标被替换为原值。
解决方案
1. 构建节点-指标映射
从df1中提取节点与对应指标的映射关系:
import pandas as pd # 提取N列节点对应的IND_N映射 ind_n_map = df1.set_index('N')['IND_N'].to_dict() # 提取T列节点对应的IND_T映射 ind_t_map = df1.set_index('T')['IND_T'].to_dict()
2. 针对性更新df2的指标
仅替换df2中存在映射的指标项,保留无匹配的-1:
# 更新IND_T列:用T列节点匹配映射,无匹配则保留原-1 df2['IND_T'] = df2['T'].map(ind_t_map).fillna(df2['IND_T']).astype(int) # 更新IND_N列:用N列节点匹配映射,无匹配则保留原-1 df2['IND_N'] = df2['N'].map(ind_n_map).fillna(df2['IND_N']).astype(int)
3. 合并数据集
将更新后的df2与df1合并,得到目标结果:
df_out = pd.concat([df1, df2]).reset_index(drop=True) # 若需匹配目标输出的行顺序,可手动调整索引 df_out = df_out.loc[[0, 1, 2, 3, 4, 5]]
内容的提问来源于stack exchange,提问作者Math
相关产品推荐
相关产品推荐

