在pandas数据框架中按列值添加不同的索引前缀



我有一个数据框,有重复的索引,我正试图根据另一个数据框的rowname重新索引。然而,由于重复索引问题,当我执行df2 = df2.reindex(df.index)时,它告诉我cannot reindex on an axis with duplicate labels

下面是我的df2的样子

column233

如果你的另一个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

最新更新