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

如何在Pandas中利用行索引值结合现有列生成新列?

基于Pandas多级索引与列值生成新列的方法

先看你创建DataFrame的代码:

from itertools import product
import pandas as pd
from random import randint

idx = list(product([1,2,3],repeat=2))
index = pd.MultiIndex.from_tuples(idx, names=["x","y"])
df = pd.DataFrame(index=index, columns=["data1"], data=[randint(1,100) for _ in range(9)])

对应的表格如下:

xydata1
1134
1245
1323
217
228
2341
3158
3243
339

你想要基于索引的x、y值和data1列计算生成新列,你的示例代码存在语法错误,下面是修正后的可行方案,同时提供更高效的向量化实现:

方法1:修正apply写法

你的示例函数括号不匹配,且多级索引访问方式有误,正确的apply写法如下:

def calculate(v):
    return (v.name[0] + v.name[1]) * v["data1"]

df["new_col"] = df.apply(calculate, axis=1)

这里v.name是当前行的多级索引元组,通过索引0、1分别获取x和y的值,修正括号后即可正确计算。

方法2:向量化实现(推荐)

apply处理大数据集时效率较低,更推荐用向量化操作,直接提取索引的x、y级别计算:

df["new_col"] = (df.index.get_level_values("x") + df.index.get_level_values("y")) * df["data1"]

这种方式无需遍历每一行,性能远高于apply,适合大规模数据处理。

执行后,DataFrame会新增new_col列,以你的示例数据为例,结果如下:

xydata1new_col
113468
1245135
132392
21721
22832
2341205
3158232
3243215
33954

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 04:03:27