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

如何根据Pandas DataFrame的STRATEGY列映射字典指定位置的值?

问题描述

现有如下Pandas DataFrame:

import pandas as pd
data = [['BALANCED', 'Corp EUR'], ['YIELD', 'Corp USD'], ['GROWTH', 'HG CHF']]
df = pd.DataFrame(data, columns=['STRATEGY', 'ASSET_CLASS'])

对应的DataFrame输出:

STRATEGY    ASSET_CLASS
0   BALANCED    Corp EUR
1   YIELD       Corp USD
2   GROWTH      HG CHF

目标是根据STRATEGY列的值,从以下字典中提取对应位置的元素,生成TARGET列:

my_dict = {'HG CHF': [5, 2, 3, 4],
           'Corp EUR': [4, 6, 8, 7],
           'Corp USD': [9, 7.5, 5.3, 6],
          }

对应规则:

  • YIELD → 列表第2个元素(索引1)
  • BALANCED → 列表第3个元素(索引2)
  • GROWTH → 列表第4个元素(索引3)

期望输出:

STRATEGY ASSET_CLASS  TARGET
0  BALANCED    Corp EUR     8.0
1     YIELD    Corp USD     7.5
2    GROWTH      HG CHF     4.0

当前使用df['TARGET'] = df['ASSET_CLASS'].map(my_dict)得到的是整个列表,请问如何正确获取字典中指定位置的值?


解决方案

方法1:逐行映射取值

先定义STRATEGY到索引的对应关系,再用apply逐行提取字典中对应位置的元素:

# 策略到列表索引的映射
strategy_idx_map = {
    'YIELD': 1,
    'BALANCED': 2,
    'GROWTH': 3
}

# 生成TARGET列
df['TARGET'] = df.apply(lambda row: my_dict[row['ASSET_CLASS']][strategy_idx_map[row['STRATEGY']]], axis=1)

方法2:批量映射后提取元素

先分别把ASSET_CLASS映射为对应列表、STRATEGY映射为对应索引,再通过列表推导式批量提取值:

strategy_idx_map = {'YIELD':1, 'BALANCED':2, 'GROWTH':3}
# 批量获取列表和对应索引,再提取元素
df['TARGET'] = [lst[idx] for lst, idx in zip(df['ASSET_CLASS'].map(my_dict), df['STRATEGY'].map(strategy_idx_map))]

方法3:数据重塑合并(适合大规模数据)

如果数据量较大,apply效率偏低,可以将字典转换为DataFrame后合并,再提取对应列的值:

# 将字典转为DataFrame,重置索引为ASSET_CLASS
dict_df = pd.DataFrame(my_dict).T.reset_index().rename(columns={
    'index':'ASSET_CLASS',
    0:'col0', 1:'col1', 2:'col2', 3:'col3'
})

# 策略到目标列名的映射
strategy_col_map = {'YIELD':'col1', 'BALANCED':'col2', 'GROWTH':'col3'}
df['target_col'] = df['STRATEGY'].map(strategy_col_map)

# 合并后提取对应列的值
df = df.merge(dict_df, on='ASSET_CLASS')
df['TARGET'] = df.apply(lambda row: row[row['target_col']], axis=1)

# 清理临时列
df = df.drop(columns=['col0','col1','col2','col3','target_col'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 16:42:12