代码之家  ›  专栏  ›  技术社区  ›  chowpay

使用另一列作为索引添加列[duplicate]

  •  0
  • chowpay  · 技术社区  · 6 年前

    是否可以只合并一些列?我有一个数据帧df1和列x、y、z,以及df2和列x、a、b、c、d、e、f等等。

    结果将是一个包含x,y,z,a,b的数据帧。

    我可以合并然后删除不需要的列,但似乎有更好的方法。

    0 回复  |  直到 8 年前
        1
  •  87
  •   beroe    9 年前

    df2[list('xab')]  # df2 but only with columns x, a, and b
    
    df1.merge(df2[list('xab')])
    
        2
  •  136
  •   Arthur D. Howland    8 年前

    你想用两个括号,所以如果你在做一个VLOOKUP类型的动作:

    df = pd.merge(df,df2[['Key_Column','Target_Column']],on='Key_Column', how='left')
    

        3
  •  17
  •   shivam13juna    4 年前

    如果要从目标数据帧中删除列,但联接需要这些列,可以执行以下操作:

    df1 = df1.merge(df2[['a', 'b', 'key1']], how = 'left',
                    left_on = 'key2', right_on = 'key1').drop(columns= ['key1'])
    

    这个 .drop('key1') part将阻止“key1”保留在生成的数据帧中,尽管它首先需要连接。

        4
  •  8
  •   Ajean Vishal Agrawal    8 年前

    你可以用 .loc

    pandas.merge(dataframe1, dataframe2.iloc[:, [0:5]], how='left', on='key')
    

    在本例中,您正在合并dataframe1和dataframe2。您已选择在“key”上执行外部左连接。但是,对于dataframe2,您已经指定 .iloc 它允许您以数字格式指定所需的行和列。使用 : [0:5] 选择前5列。你可以用 按名称指定,但如果处理的是长列名,则 伊洛克先生 可能更好。

        5
  •  7
  •   nick    6 年前

    如果 table_1 t1_a,t1_b,t1_c..,id,..t1_z 柱, 和 table_2 包含 t2_a, t2_b, t2_c..., id,..t2_z 柱, 在最后一个表中只需要t1,id,t2

    mergedCSV = table_1[['t1_a','id']].merge(table_2[['t2_a','id']], on = 'id',how = 'left')
    # save resulting output file    
    mergedCSV.to_csv('output.csv',index = False)