将置换矩阵应用于 pandas DataFrame

Apply permutation matrix to pandas DataFrame

我有两个大小相同的 DataFrame(称它们为 AB),它们具有相同的一组索引和列名称。 AB 的 (row/column) 标签顺序不同,我希望它们的标签相同,这样我就可以在其他程序中直接操作矩阵。从数学上讲,有一个置换矩阵 P 可以将一个矩阵标签重新排列为另一个矩阵标签,因此我可以通过构建矩阵来应用此转换。然而,我觉得这是矫枉过正,pandas 本身应该存在一个解决方案。

有没有一种简单的方法可以做到这一点 pandas 而无需下面的丑陋技巧?

# construct A,B ...
import numpy as np
import pandas as pd

# Construct the permutation matrix
permutation = [np.where(B.index==a_idx)[0][0] for a_idx in A.index]
P = np.zeros(A.shape)
for k,row in zip(permutation,P):  row[k] = 1

B2 = (P).dot(B.values).dot(P.T)
B2 = pd.DataFrame(B2, index = A.index, columns = A.index)

您可以使用 reindex_like 重新排序一个 DataFrame 的 rows/columns 以符合另一个 DataFrame。

>>> vals = np.arange(9).reshape(3,3)
>>> df1 = pd.DataFrame(vals, columns=list('def'), index=list('abc'))
>>> df2 = pd.DataFrame(vals, columns=list('efd'), index=list('bac'))

然后重新排序 df1 使其与 df2:

相同
>>> df1.reindex_like(df2)
   e  f  d
b  4  5  3
a  1  2  0
c  7  8  6