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

如何用ChainMap实现DataFrame的一对多映射并展开多行?

实现一对多映射并展开DataFrame行

你当前使用ChainMap的方式只能获取每个code匹配到的第一个映射值,无法捕获所有关联的映射关系。要实现一对多映射并将每个关系展开为单独行,需要先构建多值映射字典,再通过pandas的explode方法展开行。

解决方案代码

from collections import defaultdict
import pandas as pd

# 定义原始映射规则:(code列表, 对应标签)
mapping_rules = [
    (['a', 'b', 'c'], 'A'),
    (['a', 'c', 'd'], 'B'),
    (['d', 'e', 'f'], 'C')
]

# 构建多值映射字典:每个code对应所有关联的标签
multi_mapping = defaultdict(list)
for codes, label in mapping_rules:
    for code in codes:
        multi_mapping[code].append(label)

# 原始DataFrame
df = pd.DataFrame({'code': ['a', 'b', 'c', 'd', 'e', 'f'], 'value': [1, 2, 3, 4, 5, 6]})

# 为每个code匹配所有关联标签(结果为列表)
df['mapping'] = df['code'].map(multi_mapping)

# 将列表展开为单独行,重置索引
df = df.explode('mapping').reset_index(drop=True)

print(df)

输出结果

code  value mapping
0    a      1       A
1    a      1       B
2    b      2       A
3    c      3       A
4    c      3       B
5    d      4       B
6    d      4       C
7    e      5       C
8    f      6       C

注:你期望结果中e有两行C,但根据原始映射规则,e仅关联C一次,因此实际输出中e对应一行。如果需要重复行,可以在构建multi_mapping时手动添加重复标签,或后续对指定行进行复制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 05:15:36