如何使用增加的索引值作为键与 non-index 列合并

How to use increasing index value as a key to merge with a non-index column

我有两个数据框,如下所示

tdf = pd.DataFrame({'subj_id': [11,12,13,14,15],
                   'dash': np.random.choice(list('PPPS'),size=(5)),
                   'dumeel': np.random.choice(list('QWRR'),size=(5)),
                   'dumma': np.random.choice((1234),size=(5)),
                   'target': np.random.choice([0,1],size=(5))
})

cdf = pd.DataFrame({'key_index': [1,1,1,3,3],
                   'dash': np.random.choice(list('abcd'),size=(5)),
                   'dumeel': np.random.choice(list('test'),size=(5)),
                   'dumma': np.random.choice((7890),size=(5))
})

如您所见,cdf 在名为 key_index 的列中包含它的索引(也是键)。但是,我必须将这些记录与 tdf 合并以获得 subj_id 列。

基本上,cdf 中的 key_index = 1 对应于 tdf 中的第二个索引行。 key_index = 3 对应于 tdf 等中的第 4 个索引行。cdf 中的 key_index + 1 始终对应于 = tdf[= 中的匹配索引位置25=]

我尝试了以下方法,但它不起作用。我不知道如何为百万数据行添加和扩展它

cdf.merge(tdf, right_index=True, left_index=False) #merge error
cdf.merge(tdf, right_index=False, left_index=True) #merge error

我希望我的输出如下所示

不要 merge,使用 map 您想要的单个列将引用增加 1:

cdf['subj_id'] = cdf['key_index'].add(1).map(tdf['subj_id'])

输出:

   key_index dash dumeel  dumma  subj_id
0          1    c      e    427       13
1          1    b      s   7090       13
2          1    d      t   4056       13
3          3    a      e   4186       15
4          3    b      s   1433       15

替代 merge

cdf.merge(tdf['subj_id'],
          left_on=cdf['key_index'].add(1),
          right_index=True).drop(columns='key_0')