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

如何为Pandas Series应用返回多行的函数并添加二级索引

Pandas Series逐元素应用多值函数并生成二级MultiIndex索引

问题场景

现有单级索引的Pandas Series,需要对每个元素应用一个返回多值的函数(返回值可为Series或列表),最终生成带二级MultiIndex的新Series:原索引作为第一级,每个返回值的位置作为第二级。

解决方案

方案1:兼容返回Series的函数(groupby + apply)

如果你的函数返回pd.Series,可以通过groupby(level=0).apply实现,之后为二级索引添加名称:

import pandas as pd

# 示例原Series
s = pd.Series([2, 3], index=['a', 'b'])

# 定义返回Series的函数
def my_func(x):
    return pd.Series([10, 20, 30]) if x == 2 else pd.Series([40, 50])

# 生成带二级索引的结果
result = s.groupby(level=0).apply(lambda x: my_func(x.iloc[0]))
# 为索引层级命名
result.index = result.index.set_names(["原索引", "值序号"])

方案2:返回列表+DataFrame.stack()(更高效)

将函数改为返回列表,通过pd.DataFrame转换后调用stack(),这是性能更优的方案:

# 修改函数返回列表
def my_func(x):
    return [10, 20, 30] if x == 2 else [40, 50]

# 转换流程
temp_df = pd.DataFrame(s.apply(my_func).tolist(), index=s.index)
result = temp_df.stack()
# 为索引层级命名
result.index = result.index.set_names(["原索引", "值序号"])

关键提示

  • 方案2的执行效率更高,因为tolist()和stack()都是Pandas内部优化的矢量化操作,适合处理大数据量
  • 两种方案最终都能得到符合需求的二级MultiIndex Series,可根据函数返回类型选择对应方式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 05:52:08