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

拼接列索引结构不匹配的DataFrame:添加单行小表数据

合并大型多层列DataFrame与单行DataFrame的实现方案

数据准备

先根据提供的数据源构造两个目标DataFrame:

import pandas as pd

# 构造大型多层列DataFrame
large_df_data = {
    ('TC2_37', 'value'): {'Aug 23': 20339.0, 'Sep 23': 19737.0, 'Oct 23': 19821.0, 'Nov 23': 20803.0, 'Dec 23': 22070.0, 'Q3 23': 18158.0, 'Q4 23': 20899.0, 'Q1 24': 16361.0, 'Q2 24': 14581.0, 'Q3 24': 13029.0, 'Q4 24': 16701.0, 'Cal 24': 15168.0, 'Cal 25': 13950.0},
    ('TC2_37', 'daily_change'): {'Aug 23': 4018.0, 'Sep 23': 3037.0, 'Oct 23': 1316.0, 'Nov 23': 580.0, 'Dec 23': 115.0, 'Q3 23': 1891.0, 'Q4 23': 672.0, 'Q1 24': 363.0, 'Q2 24': 380.0, 'Q3 24': 415.0, 'Q4 24': 310.0, 'Cal 24': 367.0, 'Cal 25': 98.0},
    ('TD25', 'value'): {'Aug 23': 26569.0, 'Sep 23': 32725.0, 'Oct 23': 38033.0, 'Nov 23': 40282.0, 'Dec 23': 42195.0, 'Q3 23': 31269.0, 'Q4 23': 40170.0, 'Q1 24': 37983.0, 'Q2 24': 28731.0, 'Q3 24': 27840.0, 'Q4 24': 33390.0, 'Cal 24': 31986.0, 'Cal 25': 30712.0},
    ('TD25', 'daily_change'): {'Aug 23': -951.0, 'Sep 23': -507.0, 'Oct 23': -18.0, 'Nov 23': -188.0, 'Dec 23': -148.0, 'Q3 23': -1102.0, 'Q4 23': -117.0, 'Q1 24': -125.0, 'Q2 24': 546.0, 'Q3 24': 628.0, 'Q4 24': 520.0, 'Cal 24': 393.0, 'Cal 25': 139.0}
}
large_df = pd.DataFrame(large_df_data)

# 构造单行小型DataFrame
small_df_data = {
    'A6TCE': [17134.0],
    'BCTI': [720.0],
    'BDTI': [821.0],
    'MA2TCE': [28859.0],
    'TD7': [9917.0],
    'TD8': [31700.0],
    'TD25': [10408.0],
    'V2TCE': [11800.0],
    'TC2_37': [990.0]
}
small_df = pd.DataFrame(small_df_data, index=['2023-08-02'])

核心实现步骤

1. 筛选重叠的route列

找出两个DataFrame共有的route列:

# 获取大型DataFrame的第一层列(route名称)
large_routes = large_df.columns.get_level_values(0).unique()
# 获取小型DataFrame的列名
small_routes = small_df.columns
# 取两者的交集
common_routes = large_routes.intersection(small_routes)

2. 转换小型DataFrame为多层列结构

将小型DataFrame调整为与大型DataFrame一致的多层列格式,仅填充value子列,daily_change子列留空:

# 构造匹配大型DataFrame的多层列索引
new_small_columns = pd.MultiIndex.from_product([common_routes, ['value', 'daily_change']])
# 创建空的多层列DataFrame
small_df_multi = pd.DataFrame(index=small_df.index, columns=new_small_columns)
# 填充value子列的数据
for route in common_routes:
    small_df_multi[(route, 'value')] = small_df[route]

3. 合并两个DataFrame

将处理后的小型DataFrame放在大型DataFrame的最前面:

# 纵向合并两个DataFrame
combined_df = pd.concat([small_df_multi, large_df], axis=0)
# 保持索引名称与原数据一致
combined_df.index.name = 'period'

验证结果

输出合并后的DataFrame,结构与需求完全匹配:

print(combined_df)

输出示例(部分列):

TC2_37               TD25              
             value daily_change   value daily_change
period                                              
2023-08-02   990.0          NaN  10408.0          NaN
Aug 23      20339.0       4018.0  26569.0       -951.0
Sep 23      19737.0       3037.0  32725.0       -507.0
Oct 23      19821.0       1316.0  38033.0        -18.0
...           ...          ...      ...          ...
Cal 25      13950.0         98.0  30712.0        139.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 18:22:36