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

如何根据MultiIndex的direction层级映射pandas Series中的值?

问题描述

我有一个带MultiIndex的pd.Series,创建代码如下:

import pandas as pd

# 创建Series
data = {
    ("long_only", "Security_1"): -1,
    ("long_only", "Security_3"): 1,
    ("long_only", "Security_5"): 1,
    ("short_only", "Security_2"): -1,
    ("short_only", "Security_4"): 1,
    ("both", "Security_1"): -2,
    ("both", "Security_2"): -1,
    ("both", "Security_4"): 1,
}

signals = pd.Series(data, dtype="int8")
signals.index = signals.index.set_names(["direction", "symbol"])

print(signals)

输出结果:

direction   symbol    
long_only   Security_1   -1
            Security_3    1
            Security_5    1
short_only  Security_2   -1
            Security_4    1
both        Security_1   -2
            Security_2   -1
            Security_4    1
dtype: int8

需要根据以下字典,结合MultiIndex的direction层级,将Series中的整数值转换为对应字符串:

# 定义映射字典
trade_state_dict = {
    "long_only": {
        -1: "long -> flat",
        1: "flat -> long",
    },
    "short_only": {
        -1: "flat -> short",
        1: "short -> flat",
    },
    "both": {
        -2: "long -> short",
        -1: "long -> flat",
        1: "flat -> long",
        2: "short -> long",
    },
}

预期转换结果:

direction   symbol    
long_only   Security_1   "long -> flat"
            Security_3   "flat -> long"
            Security_5   "flat -> long"
short_only  Security_2   "flat -> short"
            Security_4   "short -> flat"
both        Security_1   "long -> short"
            Security_2   "long -> flat"
            Security_4   "flat -> long"
解决方案

方法1:分组映射

通过groupby按direction层级分组,每组调用对应方向的映射字典完成值转换:

result = signals.groupby(level="direction").apply(
    lambda x: x.map(trade_state_dict[x.name])
)

方法2:多级映射表替换

先将原映射字典转换为带MultiIndex的Series,再直接匹配替换原Series的值:

# 构建多级索引的映射Series
mapping = pd.Series({
    (dir_type, code): desc
    for dir_type, inner_map in trade_state_dict.items()
    for code, desc in inner_map.items()
})

# 执行替换
result = signals.replace(mapping)

两种方法均可得到符合预期的转换结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 10:37:42