2016-04-04 64 views
2

在熊貓中合併多個數據框(即多於2個)的最有效方式是什麼?有幾個答案:高效合併多個大熊貓數據框

  1. pandas joining multiple dataframes on columns
  2. Pandas left outer join multiple dataframes on multiple columns

但這些都涉及多種連接。如果我有N個數據幀,則需要N-1個連接。

如果我不使用熊貓,另一種解決方案是將所有內容都放入基於公共索引作爲鍵的哈希表中,然後構建最終版本。這基本上就像我相信SQL中的散列連接。熊貓裏有這樣的東西嗎?

如果不是,只用公共索引創建一個新的數據幀並將每個數據幀的原始數據傳遞給它會更有效嗎?看起來這樣至少會阻止你在每個N-1連接中創建一個新的數據幀。

謝謝。

+0

你怎麼加入他們的行列?在索引?內部連接還是左邊/外部連接? – MaxU

回答

1

,如果你可以通過索引加入您的數據幀,你可以做在一個傳送帶:

df1.join(df2).join(df3).join(df4) 

例如:

In [187]: df1 
Out[187]: 
    a b 
0 5 2 
1 6 7 
2 6 5 
3 1 6 
4 0 2 

In [188]: df2 
Out[188]: 
    c d 
0 5 7 
1 5 5 
2 2 4 
3 4 3 
4 9 0 

In [189]: df3 
Out[189]: 
    e f 
0 8 1 
1 0 9 
2 4 5 
3 3 9 
4 9 5 

In [190]: df1.join(df2).join(df3) 
Out[190]: 
    a b c d e f 
0 5 2 5 7 8 1 
1 6 7 5 5 0 9 
2 6 5 2 4 4 5 
3 1 6 4 3 3 9 
4 0 2 9 0 9 5 

它應該是非常快速和有效的

或者你可以連接它們:

In [191]: pd.concat([df1,df2,df3], axis=1) 
Out[191]: 
    a b c d e f 
0 5 2 5 7 8 1 
1 6 7 5 5 0 9 
2 6 5 2 4 4 5 
3 1 6 4 3 3 9 
4 0 2 9 0 9 5 

3 DF與各100K行時間比較:

In [198]: %timeit pd.concat([df1,df2,df3], axis=1) 
100 loops, best of 3: 5.67 ms per loop 

In [199]: %timeit df1.join(df2).join(df3) 
100 loops, best of 3: 3.93 ms per loop 

所以你可以看到join是有點快