gpt4 book ai didi

python-3.x - 如何在 Pandas 数据框上制作矩形矩阵正方形

转载 作者:行者123 更新时间:2023-12-02 00:32:37 24 4
gpt4 key购买 nike

我有一个如下形式的矩阵(不一定是正方形):

   A    B    C    D
A 0 0.2 0.3 0.5
E 0.2 0.6 0.9 0.2
D 0.5 0.3 0.6 0
F 0.1 0.4 0.5 0.3

我想把它变成一个方阵如下

   A    B    C    D    E    F
A 0 0.2 0.3 0.5 0.2 0.1
B 0.2 0 0 0.3 0.6 0.4
C 0.3 0 0 0.6 0.9 0.5
D 0.5 0.3 0.6 0 0.2 0.3
E 0.2 0.6 0.9 0.2 0 0
F 0.1 0.4 0.5 0.3 0 0

换句话说,我想将行和列都展开,使其成为对称方阵(行和列的顺序相同),缺失值用0填充。

我猜应该有一种方法可以使用 pandas 的内置函数轻松/高效地执行此操作,但我不熟悉该程序包。

为方便起见:

df = pd.DataFrame([[0, 0.2, 0.3, 0.5],
[0.2, 0.6, 0.9, 0.2],
[0.5, 0.3, 0.6, 0],
[0.1, 0.4, 0.5, 0.3]],
index=['A', 'E', 'D', 'F'],
columns=['A', 'B', 'C', 'D'])

最佳答案

正如您所想,您绝对可以在 Pandas 中非常简洁地完成此操作。

一种方法是使用非常好的 combine_first方法。

result = df.combine_first(df.T).fillna(0.0)

但是,在我使用 timeit 的测试中每个循环的时间为 3.62 ms ± 29.2 µs,实际上比我为 your method 得到的时间稍慢(每个循环 3.5 ms ± 28.6 µs)。

但是,通过使用 update 在 Pandas 中更直接地计算它方法我能够将其降低到每个循环 2.04 ms ± 17.2 µs 每个循环 µs(快约 1.7 倍)。

# Find the combination of both indices
full_index = df.index.union(df.columns)
# Resize the DataFrame to include all the rows and columns
all_data = df.reindex(labels=full_index, axis=0).reindex(labels=full_index, axis=1)
# Update any values we have from the transpose
all_data.update(all_data.T)
# Fill the missing entries
result = all_data.fillna(0.0)

老实说,我并没有像我想象的那样获得尽可能多的性能改进,但至少对我来说,这两个基于 pandas 的版本都更具可读性。

关于python-3.x - 如何在 Pandas 数据框上制作矩形矩阵正方形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51254067/

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