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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 11:34:59