如何使用增加的索引值作为键与 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')
我有两个数据框,如下所示
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')