Python 从单个df提取列信息并输入到标识符需要重新映射的多个df

Python 从单个df提取列信息并输入到标识符需要重新映射的多个df,python,pandas,dataframe,dictionary,merge,Python,Pandas,Dataframe,Dictionary,Merge,我需要将df1中某列的行数据附加到单独的dfs中。 df1中列“i1”中的行值应对应于它也需要追加的数据帧的名称,并且跨数据帧有一个公共id列 但是,i1名称和表的名称是不同的。我在下面编了一本字典,这样你就能明白我的意思了 d_map = {'ab1':'c30_sab1', 'cd2':'kjm_1cd2'} 示例数据和预期输出如下所示,使用df1显示。任何指点都很好。非常感谢 df1 df = pd.DataFrame(data={'id': [1, 1, 2, 2,

我需要将df1中某列的行数据附加到单独的dfs中。 df1中列“i1”中的行值应对应于它也需要追加的数据帧的名称,并且跨数据帧有一个公共id列

但是,i1名称和表的名称是不同的。我在下面编了一本字典,这样你就能明白我的意思了

d_map = {'ab1':'c30_sab1',
         'cd2':'kjm_1cd2'}
示例数据和预期输出如下所示,使用df1显示。任何指点都很好。非常感谢

df1

df = pd.DataFrame(data={'id': [1, 1, 2, 2, 3], 'i1': ['ab1','cd2','ab1','cd2','ab1'], 'i2': ['10:25','10:27','11:51','12:01','13:18']})
根据id和i1匹配情况,需要从df1中追加i2列的表

c30_sab = pd.DataFrame(data={'id': [1, 2, 3]})
kjm_1cd = pd.DataFrame(data={'id': [1, 2]})

预期产出

e_ab1 = pd.DataFrame(data={'id': [1, 2, 3], 'i2': ['10:25','11:51','13:18']})
e_cd2 = pd.DataFrame(data={'id': [1, 2], 'i2': ['10:27','12:01']})
一种简单的方法(假设您在复制
df
id时接受重复):


谢谢@Sophoros。所以我只是编辑了这个问题,因为在某些情况下,i1值与表名不匹配,需要重新映射才能正确追加。您对此有何建议?再次感谢!!我懂了。一开始我没看到。但现在更新了答案以满足您的需要。
df_ab1 = df[df['i1'] == 'ab1']  # select only the values for 'ab1' df
df_cd2 = df[df['i1'] == 'cd2']  # select only the values for 'cd2' df

e_ab_1 = ab1.merge(df_ab1[['id', 'i2']], on='id')
e_cd_2 = cd2.merge(df_cd2[['id', 'i2']], on='id')