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

如何在Pandas DataFrame中实现单列值的一对多替换并复制对应列数据

实现DataFrame中Geo列的一对多映射并复制对应行数据

这里有个用pandas快速解决这个需求的方案,步骤清晰,代码简洁:

首先,我们先准备好示例数据和映射字典:

import pandas as pd

# 你的原始输入DataFrame
df = pd.DataFrame({
    "Date": ["2020-01-01", "2020-01-01", "2020-01-01", "2020-01-02", "2020-01-02"],
    "Geo": ["USA", "BRA", "CHN", "EU1", "EU2"],
    "Shipment": [1000, 5865, 4789, 6541, 3258]
})

# 定义你的映射字典
geo_mapping = {
    "EU1": ["ALA", "BEL", "AND", "AUT"],
    "EU2": ["AUT", "BEL", "BGR", "HRV", "CZE"],
    "EU3": ["EST", "HRV", "FRA", "DEU"]
}

接下来执行两步核心操作:

  1. 将Geo列转换为对应国家列表:
    用map方法匹配映射字典,把每个Geo值替换成对应的国家列表;对于不在映射字典里的Geo值(比如USA、BRA、CHN),我们将其转为单元素列表,这样后续不会丢失这些行:

    df['Geo'] = df['Geo'].map(geo_mapping).fillna(df['Geo'].apply(lambda x: [x]))
    
  2. 展开列表为多行:
    使用explode方法把列表类型的Geo列拆分成独立行,Date和Shipment列的数值会自动复制到每一行:

    result_df = df.explode('Geo').reset_index(drop=True)
    

运行后你就能得到想要的结果,比如EU1对应的行会被拆成4行,分别对应ALA、BEL、AND、AUT,每行的Shipment值都是6541;而未在映射字典中的USA会保留单独一行。

输出的结果示例片段:

Date  Geo  Shipment
0  2020-01-01  USA      1000
1  2020-01-01  BRA      5865
2  2020-01-01  CHN      4789
3  2020-01-02  ALA      6541
4  2020-01-02  BEL      6541
5  2020-01-02  AND      6541
6  2020-01-02  AUT      6541
7  2020-01-02  AUT      3258
8  2020-01-02  BEL      3258
9  2020-01-02  BGR      3258
...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 11:37:44