gpt4 book ai didi

python - 将置换矩阵应用于 pandas DataFrame

转载 作者:太空宇宙 更新时间:2023-11-03 17:54:29 24 4
gpt4 key购买 nike

我有两个大小相同的 DataFrame(将它们称为 AB),具有相同的索引和列名称集。 A 和 B 的(行/列)标签的顺序不同,我希望它们具有相同的标签,以便我可以直接操作其他程序中的矩阵。从数学上讲,有一个置换矩阵 P 可以将一个矩阵标签重新排列到另一个矩阵标签,因此我可以通过构造矩阵来应用此变换。然而,我觉得这太过分了,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 的行/列重新排序以符合另一个 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

关于python - 将置换矩阵应用于 pandas DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28678317/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com