我有一个数据框,有重复的索引,我正试图根据另一个数据框的rowname重新索引。然而,由于重复索引问题,当我执行df2 = df2.reindex(df.index)
时,它告诉我cannot reindex on an axis with duplicate labels
。
下面是我的df2的样子
如果你的另一个DataFrame也有"index"one_answers"column1",为什么不使用两者作为索引?
或者,您可以删除重复的"index"使用str.extract
从"column1"获取id;在下划线后面:
df['index'] = (df['column1']
.str.extract('_([^_]+)$', expand=False)
.add('_'+df['index'])
)
更新dataframe:
index column1 column2
0 a_A sample_a 1
1 a_B sample_a 3
2 b_B sample_b 2
3 c_C sample_c 3
正则表达式:
_ # match underscore
([^_]+) # capture non-underscore characters
$ # match end of line
regex演示
您可以使用str.slice
df2['index'] = df2['column1'].str.slice(-1) + "_" + df2['index']
输出:index column1 column2
0 a_A sample_a 1
1 a_B sample_a 3
2 b_B sample_b 2
3 c_C sample_c 3
附注:
您还可以通过使用pandas dataframe .cumcount
来保证唯一索引:
df2['index'] = df2['index'] + df2.groupby(['index'])['index'].cumcount().astype(str)
产生这样的输出:
index column1 column2
0 A0 sample_a 1
1 B0 sample_a 3
2 B1 sample_b 2
3 C0 sample_c 3