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

如何通过另一DataFrame的列标题层级填充多索引列空DataFrame

高效填充多层列索引DataFrame的方法

不用遍历列,直接利用pandas的列索引提取和重定向功能就能搞定,步骤如下:

1. 先构造示例数据

import pandas as pd

# 创建DataFrame A
data_A = {1: [46, 95, 30], 2: [47, 58, 52], 3: [9, 6, 85]}
A = pd.DataFrame(data_A, index=pd.to_datetime(['1971-01-04', '1971-01-05', '1971-01-06']))
A.index.name = 'Date'

# 创建空的多层列索引DataFrame B
columns_B = pd.MultiIndex.from_tuples([(1,1), (1,2), (1,3)], names=[None, 'level_1'])
B = pd.DataFrame(index=A.index, columns=columns_B)

2. 按第一层列索引匹配填充

提取B第一层的列标签,用A中对应标签的列批量填充,最后替换列名适配B的多层索引:

# 获取B第一层的所有列标签
level0_tags = B.columns.get_level_values(0)
# 从A中取出对应列,重设列名为B的多层索引
B_filled_level0 = A.loc[:, level0_tags].set_axis(B.columns, axis=1)

输出结果:

1         
level_1       1   2   3
Date                   
1971-01-04  46  46  46
1971-01-05  95  95  95
1971-01-06  30  30  30

3. 按第二层列索引匹配填充

同理,提取第二层标签后直接匹配A的列:

# 获取B第二层的所有列标签
level1_tags = B.columns.get_level_values(1)
# 从A中取出对应列,重设列名为B的多层索引
B_filled_level1 = A.loc[:, level1_tags].set_axis(B.columns, axis=1)

输出结果:

1         
level_1       1   2   3
Date                   
1971-01-04  46  47   9
1971-01-05  95  58   6
1971-01-06  30  52  85

这种方法完全利用pandas的向量操作,比遍历列效率高得多,数据量大时优势更明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 17:39:53