簡體   English   中英

如何根據索引合並兩個 numpy 數據集?

[英]How to merge two numpy datasets based of index?

我有兩個大型數據集,雖然 pandas 使合並數據集變得更容易,但它使用了太多 memory 供我使用。 在 pandas 中,它看起來像這樣:

left = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
                     'A': ['A0', 'A1', 'A2', 'A3'],
                     'B': ['B0', 'B1', 'B2', 'B3']})

right = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
                      'C': ['C0', 'C1', 'C2', 'C3'],
                      'D': ['D0', 'D1', 'D2', 'D3']})

result = pd.merge(left, right, on='key')

在這種情況下,合並只是連接來自right數據集的兩列,但這通常在鍵被打亂時使用。 我將如何在 Numpy 中執行此操作?

In [2]: import pandas as pd
In [3]: left = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
   ...:                      'A': ['A0', 'A1', 'A2', 'A3'],
   ...:                      'B': ['B0', 'B1', 'B2', 'B3']})
   ...: 
   ...: right = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
   ...:                       'C': ['C0', 'C1', 'C2', 'C3'],
   ...:                       'D': ['D0', 'D1', 'D2', 'D3']})
   ...: 
In [4]: left
Out[4]: 
  key   A   B
0  K0  A0  B0
1  K1  A1  B1
2  K2  A2  B2
3  K3  A3  B3
In [5]: right
Out[5]: 
  key   C   D
0  K0  C0  D0
1  K1  C1  D1
2  K2  C2  D2
3  K3  C3  D3
In [6]: result = pd.merge(left, right, on='key')
In [7]: result
Out[7]: 
  key   A   B   C   D
0  K0  A0  B0  C0  D0
1  K1  A1  B1  C1  D1
2  K2  A2  B2  C2  D2
3  K3  A3  B3  C3  D3

如果您展示了這些數據框,那就太好了。 這樣我們就不必“想象”結果或在我們的小腦袋里運行代碼:(

正如我所建議的,查看從框架派生的 arrays:

In [8]: left.to_numpy()
Out[8]: 
array([['K0', 'A0', 'B0'],
       ['K1', 'A1', 'B1'],
       ['K2', 'A2', 'B2'],
       ['K3', 'A3', 'B3']], dtype=object)
In [9]: right.to_numpy()
Out[9]: 
array([['K0', 'C0', 'D0'],
       ['K1', 'C1', 'D1'],
       ['K2', 'C2', 'D2'],
       ['K3', 'C3', 'D3']], dtype=object)
In [10]: result.to_numpy()
Out[10]: 
array([['K0', 'A0', 'B0', 'C0', 'D0'],
       ['K1', 'A1', 'B1', 'C1', 'D1'],
       ['K2', 'A2', 'B2', 'C2', 'D2'],
       ['K3', 'A3', 'B3', 'C3', 'D3']], dtype=object)

如果鍵匹配,我們可以簡單地concatenate

In [11]: np.concatenate([Out[8], Out[9][:,1:]], axis=1)
Out[11]: 
array([['K0', 'A0', 'B0', 'C0', 'D0'],
       ['K1', 'A1', 'B1', 'C1', 'D1'],
       ['K2', 'A2', 'B2', 'C2', 'D2'],
       ['K3', 'A3', 'B3', 'C3', 'D3']], dtype=object)

numpy沒有“合並”功能。 如果鍵只是以一個或另一個重新排序,您可以構造重新排序行以匹配,例如

In [12]: Out[9][[3,1,0,2],:]
Out[12]: 
array([['K3', 'C3', 'D3'],
       ['K1', 'C1', 'D1'],
       ['K0', 'C0', 'D0'],
       ['K2', 'C2', 'D2']], dtype=object)

如果需要,我會讓你弄清楚重新排序,包括任何丟失或重復的鍵。 由於pandas已經解決了這些細節,因此在numpy中重新發明輪子可能不值得您花時間重新發明輪子(特別是如果您還不精通numpy )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM