python - 如何根据索引合并两个 numpy 数据集?
问题描述
我有两个大型数据集,虽然 pandas 可以更轻松地合并数据集,但它占用了太多内存供我使用。在 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
如果您展示了这些数据框,那就太好了。这样我们就不必“想象”结果或在我们的小脑袋里运行代码:(
正如我所建议的,查看从框架派生的数组:
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
.
推荐阅读
- javascript - 为什么循环保持两个变量相等?
- javascript - Chrome 扩展在页面刷新期间循环遍历数组
- sql - SQL Server 2005 查询(行数和加载间隔)
- algorithm - 设置k位计算大小为b的第n个位序列的快速方法?
- powershell - DesktopAppConverter - PowerShell 错误记录:无法删除项目
- javascript - 侧边栏动画延迟
- makefile - 编译 autoconf 导致版本报告不正确
- pyspark - CREATE Hive TABLE (AS SELECT) 需要 Hive 支持
- sql - 文件结束触发错误
- java - 映射一组枚举 - Hibernate