You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Pandas DataFrame的索引与列集合统一为二者的并集?

高效扩展Pandas DataFrame的行与列(适配邻接矩阵场景)

在构建有向图邻接矩阵这类场景里,DataFrame的行索引和列往往是同一类对象(比如图的节点),我们需要把索引和列都扩展成原索引与列的并集,同时填充NaN或自定义值——不用费劲写循环遍历,用Pandas原生的reindex就能高效搞定。

具体操作步骤

1. 先凑齐所有需要保留的节点

先把原索引和列的所有元素合并成一个集合,这就是我们最终要用到的行/列集合:

import pandas as pd

# 拿示例DataFrame举例
df = pd.DataFrame({'A': [1, 2], 'C': [3, 4]}, index=['B', 'C'])
# 合并索引和列,得到所有节点
all_nodes = df.index.union(df.columns)

2. 一次性扩展行和列

直接用reindex同时指定目标索引和列,还能直接设置填充值:

# 填充自定义值(比如邻接矩阵常用的0)
expanded_df = df.reindex(index=all_nodes, columns=all_nodes, fill_value=0)

# 如果想保留NaN,去掉fill_value参数就行
# expanded_df = df.reindex(index=all_nodes, columns=all_nodes)

效果展示

原DataFrame:

A  C
B  1  3
C  2  4

扩展后(fill_value=0):

A  B  C
A  0  0  0
B  1  0  3
C  2  0  4

为啥这方法比遍历强?

  • Pandas的reindex是底层优化的矢量化操作,比Python循环快N倍,数据量大的时候差距特别明显
  • 代码少,逻辑清晰,改起来也方便

特殊需求处理

要是你需要给不同位置的缺失值设不同规则(比如邻接矩阵的对角线填1,代表自环),扩展完再改就行:

expanded_df = df.reindex(index=all_nodes, columns=all_nodes, fill_value=0)
# 对角线位置填充1
expanded_df.values[[range(len(all_nodes))]*2] = 1

内容的提问来源于stack exchange,提问作者Mateusz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 15:27:13