带有复合键的 Numpy 数组;在两者中找到子集
Numpy arrays with compound keys; find subset in both
我有两个 2D numpy 数组形状:
(19133L, 12L)
(248L, 6L)
在每种情况下,前 3 个字段构成一个标识符。
我想缩小较大的矩阵,使其仅包含具有第二个矩阵中也存在的标识符的行。所以形状应该是(248L,12L)。我该怎么做?
然后我想对它进行排序,以便按第一个值、第二个值和第三个值对数组进行索引,以便 (3 3 4) 出现在 (3 3 5) 等之后。是否有多字段排序功能?
编辑:
我试过了pandas:
df1 = DataFrame(arr1.astype(str))
df2 = DataFrame(arr2.astype(str))
df1.set_index([0,1,2])
df2.set_index([0,1,2])
out = merge(df1,df2,how="inner")
print(out.shape)
但这导致 (0,13) 形状
使用pandas.
pandas.set_index() 允许多个键。因此,将索引设置为前三列(使用 drop=False, inplace=True
)以避免不必要地改变或复制数据框。
然后,merge(...how='inner') 与您的数据帧相交。
一般来说,对于任意数据帧操作,numpy 很快就会失去动力;你的默认设置应该是尝试 pandas。性能也更高。
我有两个 2D numpy 数组形状:
(19133L, 12L)
(248L, 6L)
在每种情况下,前 3 个字段构成一个标识符。
我想缩小较大的矩阵,使其仅包含具有第二个矩阵中也存在的标识符的行。所以形状应该是(248L,12L)。我该怎么做?
然后我想对它进行排序,以便按第一个值、第二个值和第三个值对数组进行索引,以便 (3 3 4) 出现在 (3 3 5) 等之后。是否有多字段排序功能?
编辑:
我试过了pandas:
df1 = DataFrame(arr1.astype(str))
df2 = DataFrame(arr2.astype(str))
df1.set_index([0,1,2])
df2.set_index([0,1,2])
out = merge(df1,df2,how="inner")
print(out.shape)
但这导致 (0,13) 形状
使用pandas.
pandas.set_index() 允许多个键。因此,将索引设置为前三列(使用 drop=False, inplace=True
)以避免不必要地改变或复制数据框。
然后,merge(...how='inner') 与您的数据帧相交。
一般来说,对于任意数据帧操作,numpy 很快就会失去动力;你的默认设置应该是尝试 pandas。性能也更高。