替换pandas数据框中的值时,由于重复轴而导致ValueError

wwtsj6pe  于 2023-04-04  发布在  其他
关注(0)|答案(1)|浏览(121)

我有一个数据集df,包括节点(N和T)和分配给节点的指示符(IND_N和IND_T):

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 1)的节点保留了df中的指标,另一个(df 2)的指标被一个虚拟值取代。
df1(保留df中的指示符)

N      T  IND_N  IND_T
0     John   Mark      1      0
1  Stephan  Simon      1      0
2    Simon   Joey      0      2

df 2(请注意,拆分后,我为df 2中的所有指示器分配了一个虚拟值-1)

N        T  IND_N  IND_T
0  Laura  Stephan     -1     -1
1   Matt    Simon     -1     -1
2   Mike     John     -1     -1

由于在df 2中可能存在也可以在df 1中找到的节点,因此为了避免节点在两个数据集中的情况(df 1和df 2),但具有不同的指示符(例如,上面示例中的Simon),我想保留/替换df 2和df 1节点的指示符,使用它们的原始指示符(即,来自df 1的那个),然后重新组合两个数据集,以便具有最终输出:
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))

在检查了最后一个表(df_out)中的值之后,我发现没有分配虚拟变量(它们再次被原始变量替换)。
我会很感激你的帮助,以解决这个错误,以获得最终的输出。高兴地提供更多的信息,如果需要的。

3pmvbmvn

3pmvbmvn1#

你可以使用一个mapping dict:

# Create a mapping dict with default value
dmap = pd.concat([df1.set_index('N')['IND_N'], df.set_index('T')['IND_T']]).to_dict()
dmap.update({'.*': -1})

df2[['IND_N', 'IND_T']] = df2[['N', 'T']].replace(dmap, regex=True).values
out = pd.concat([df1, df2], axis=0, ignore_index=True)

输出:

>>> 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

>>> dmap
{'John': 1, 'Stephan': 1, 'Simon': 0, 'Mark': 0, 'Joey': 2, '.*': -1}

相关问题