如何通过另一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
相关产品推荐
相关产品推荐

