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

如何向空pandas DataFrame追加MultiIndex行并完成对应数值赋值

实现带二级行索引MultiIndex的pandas DataFrame赋值方案

你原有代码存在两个问题:

  • 语法错误:Python的range()参数用逗号分隔,不是冒号,range(3:6)需改为range(3,6),range(6:9)需改为range(6,9)
  • 赋值逻辑错误:df.loc[[row_ind1, row_ind2], col]的写法是同时选中行索引为row_ind1和row_ind2的两个独立单行,不是指向二级MultiIndex的组合索引,需改为传入元组(row_ind1, row_ind2)作为行索引标识

方案1:按你要求的三重循环逻辑实现

import pandas as pd

# 初始化空DataFrame
df = pd.DataFrame()

for row_ind1 in range(3):
    for row_ind2 in range(3, 6):
        for col in range(6, 9):
            entry = row_ind1 * row_ind2 * col
            # 传入元组作为二级行索引标识
            df.loc[(row_ind1, row_ind2), col] = entry

# 可选操作:给索引加名称、转换列为整数类型(默认赋值会生成float类型)
df.index.names = ["row_ind1", "row_ind2"]
df = df.astype(int)

输出效果如下,完全符合你期望的结构:

6   7   8
row_ind1 row_ind2          
0        3        0   0   0
         4        0   0   0
         5        0   0   0
1        3        18  21  24
         4        24  28  32
         5        30  35  40
2        3        36  42  48
         4        48  56  64
         5        60  70  80

方案2:更高效的向量化实现(适合数据量较大的场景)

不用循环,直接通过numpy广播计算所有值再构建DataFrame:

import pandas as pd
import numpy as np

# 定义各维度取值范围
ind1 = np.arange(3)
ind2 = np.arange(3,6)
cols = np.arange(6,9)

# 广播计算所有乘积,再重塑为9行3列的二维数组
values = ind1[:, None, None] * ind2[None, :, None] * cols[None, None, :]
values = values.reshape(-1, len(cols))

# 构建二级MultiIndex
multi_index = pd.MultiIndex.from_product([ind1, ind2], names=["row_ind1", "row_ind2"])
# 生成最终DataFrame
df = pd.DataFrame(values, index=multi_index, columns=cols)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 04:06:03