[英]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.