在数据框架之间复制现有列

时间:2019-01-13 10:26:27

标签: python pandas

具有一个DataFrame,例如10个列(a,b,c ...)和另一个较小的列(其中3个列(d,f,h)),将列从第二个DataFrame复制到第一个的“最佳”方法是什么?

下面的代码似乎可以解决问题,但是我想知道是否应该使用join,merge或其他方式(以获得更好的性能/更简洁的代码)?

dfOutput = pd.DataFrame(columns=['a','b','c','d','e','f','g','h','i','j'])
melted = pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]],columns=['d','h','i'])

dfOutput[melted.columns] = melted[melted.columns]

1 个答案:

答案 0 :(得分:0)

我相信您需要df.merge()df.reindex()

melted.merge(dfOutput,on=['d','h','i'],how='left').reindex(dfOutput.columns,axis=1)

    a   b   c   d   e   f   g   h   i   j
0   NaN NaN NaN 1   NaN NaN NaN 2   3   NaN
1   NaN NaN NaN 4   NaN NaN NaN 5   6   NaN
2   NaN NaN NaN 7   NaN NaN NaN 8   9   NaN

您可以将其重新分配给第一个数据框:

dfOutput = melted.merge(dfOutput,on=['d','h','i'],how='left').reindex(dfOutput.columns,axis=1)

方案2 :如果某些列中已经有数据,请使用dfOutput.update(melted)用第二个数据帧更新第一个数据帧:

例如:

dfOutput:

    a   b   c   d   e   f   g   h   i   j
0   NaN NaN NaN 1   NaN NaN NaN NaN NaN NaN
1   NaN NaN NaN 2   NaN NaN NaN NaN NaN NaN
2   NaN NaN NaN 3   NaN NaN NaN NaN NaN NaN

融化:

    d   h   i
0   5   6   7
1   4   8   6
2   7   4   9

>>dfOutput.update(melted)
>>dfOutput

    a   b   c   d   e   f   g   h   i   j
0   NaN NaN NaN 5   NaN NaN NaN 6   7   NaN
1   NaN NaN NaN 4   NaN NaN NaN 8   6   NaN
2   NaN NaN NaN 7   NaN NaN NaN 4   9   NaN