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

Pandas如何按索引列组合从已有DataFrame填充目标空DataFrame

问题场景

你有两个标签取值范围完全一致的DataFrame:

  • df1:行索引、列索引均无重复值,已完成全部数值填充
  • df2:行索引、列索引包含重复值,初始为空,需要按照「行标签+列标签」的组合匹配规则,将df1中的对应数值填充到df2中

示例初始代码如下:

import pandas as pd

df1 = pd.DataFrame({'Ind':pd.Series([1,2,3,4]),1:pd.Series([1,0.2,0.2,0.8])
                    ,2:pd.Series([0.2,1,0.2,0.8]),3:pd.Series([0.2,0.2,1,0.8])
                    ,4:pd.Series([0.8,0.8,0.8,1])})
df1 = df1.set_index(['Ind'])

df2 = pd.DataFrame(columns = [1,1,2,2,3,4], index=[1,1,2,2,3,4])

填充后预期效果:
填充效果示例

实现方案

直接用reindex按df2的行列标签顺序展开df1的数值,再按位置赋值即可,全程为矢量化操作无循环,性能最优,不会出现标签错位问题:

# 按df2的行、列标签顺序重排df1(自动适配重复标签),再按位置赋值给df2
df2.loc[:, :] = df1.reindex(index=df2.index, columns=df2.columns).to_numpy()
结果验证

执行上述代码后打印df2,输出结果和预期完全一致:

1    1    2    2    3    4
1  1.000  1.0  0.2  0.2  0.2  0.8
1  1.000  1.0  0.2  0.2  0.2  0.8
2  0.200  0.2  1.0  1.0  0.2  0.8
2  0.200  0.2  1.0  1.0  0.2  0.8
3  0.200  0.2  0.2  0.2  1.0  0.8
4  0.800  0.8  0.8  0.8  0.8  1.0
注意事项
  • 不要直接使用df2 = df1.loc[df2.index, df2.columns]赋值:pandas在遇到重复行列标签时会触发特殊维度匹配逻辑,新版本会抛出性能警告,部分低版本会直接报维度不匹配错误
  • 不要使用逐行逐列循环的方式填充:数据量较大时循环性能会出现量级下降,上述reindex方案为pandas原生矢量化实现,性能和普通DataFrame赋值无差异

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 14:42:21