Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将dataframe多列替换为另一个dataframe的id_Python_Pandas_Dataframe - Fatal编程技术网

Python 将dataframe多列替换为另一个dataframe的id

Python 将dataframe多列替换为另一个dataframe的id,python,pandas,dataframe,Python,Pandas,Dataframe,我将熊猫数据帧df1设置为: 和df2: 列(c1、c2)上的df1和df2之间存在外键。加入看起来像: pd.merge(df1, df2, left_on=['c1','c2'], right_on = ['c1','c2']) 结果是: 我想用df2.id替换df1中的(c1,c2)。 预期最终df1为: 换句话说,我想在df1中添加列'df2_id'(用此行的df2.id值填充),并删除列(c1、c2)(它们不再是必需的) 我想通过以下方式做到这一点: 保存df1中合并的结果 删除不必

我将熊猫数据帧df1设置为:

df2

列(c1、c2)上的df1df2之间存在外键。加入看起来像:

pd.merge(df1, df2, left_on=['c1','c2'], right_on = ['c1','c2'])
结果是:

我想用df2.id替换df1中的(c1,c2)。 预期最终df1为:

换句话说,我想在df1中添加列'df2_id'(用此行的df2.id值填充),并删除列(c1、c2)(它们不再是必需的)

我想通过以下方式做到这一点:

  • 保存df1中合并的结果
  • 删除不必要的列(c1、c2)
  • 将“ID_y”重命名为“df2_ID”,将“ID_x”重命名为“ID”

  • 有更好的解决方案吗?

    我们可以通过在上使用参数和
    而不是
    左上、右上
    并使用以下方法链接,将您的步骤变成一行:

    输出

       ID_1  c3  ID_2
    0     1  32     1
    1     3  11     1
    2     2  34     2
    3     4   3     3
    
    要使其与OP的输出完全相同,请执行以下操作:

    df1.merge(df2, on=['c1','c2'], suffixes=['', '_2']).drop(['c1', 'c2'], axis=1).rename(columns={"id_2": "df2_id"})
    

    哇,太酷了!:)为了完美起见,我只会将后缀=['''''''''.''.''.''.'更改为后缀=['''''.''.'.'.''.''.''.'并在末尾添加。重命名(列={“id\u 2”:“df2\u id”})当然,added@MorticiaA.Addams
    ID_x| c1 | c2 | c3 | ID_y
    -------------------------
    1   | A  | B  | 32 | 1
    2   | C  | D  | 34 | 2
    3   | A  | B  | 11 | 1
    4   | E  | F  | 3  | 3
    
    ID| c3 | df2_id
    ---------------
    1 | 32 | 1
    2 | 34 | 2
    3 | 11 | 1
    4 | 3  | 3
    
    df1.merge(df2, on=['c1','c2'], suffixes=['_1', '_2']).drop(['c1', 'c2'], axis=1)
    
       ID_1  c3  ID_2
    0     1  32     1
    1     3  11     1
    2     2  34     2
    3     4   3     3
    
    df1.merge(df2, on=['c1','c2'], suffixes=['', '_2']).drop(['c1', 'c2'], axis=1).rename(columns={"id_2": "df2_id"})