具有一个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]
答案 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