使Pandas dataframe的索引和列成为相同的集合(它们的并集)

0 投票
1 回答
32 浏览
提问于 2025-04-13 13:29

在我们的问题中,行(索引)和列属于同一类对象。我们想要扩展一个 Pandas DataFrame,添加一些行和列,这些行和列里填充的是 NaN(缺失值)或者预定义的值,这样行和列的集合就变成了原来行列集合的并集。

比如,把下面这个表:

A C
B 0 1
C 1 1

变成:

A B C
A NaN NaN NaN
B 0 NaN 1
C 1 NaN 1

这是一个实际的例子——构建一个有向图的邻接矩阵,行和列的标签是顶点。在某个阶段,某些没有出入边的行和列需要被填充。

核心问题是如何高效地做到这一点。这个问题看起来很基础,感觉应该有一个标准的方法来实现。真的有吗?

简单的解决办法是遍历所有不在另一集合中的索引和列,然后分别把这些列和行添加到数据框中。

但是简单的 reindex 等方法的问题在于,我们同时在扩展数据框,而缺失值可能会出现在其他列之间。

1 个回答

1

我会使用 unionreindex 来获取索引:

idx = df.index.union(df.columns)
out = df.reindex(index=idx, columns=idx)

输出结果:

     A   B    C
A  NaN NaN  NaN
B  0.0 NaN  1.0
C  1.0 NaN  1.0

撰写回答