首页 > 编程问答 >Pandas 将具有多个值的字典映射到 Dataframe

Pandas 将具有多个值的字典映射到 Dataframe

时间:2024-07-24 04:00:16浏览次数:9  
标签:python pandas dataframe dictionary mapping

我有以下数据框:

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

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

我的目标是根据“策略”列中的值从具有多个值的字典中分配特定值。包含不同资产类别的字典如下所示:

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

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

在字典中,每个值描述一个特定的策略。在这种情况下,YIELD 包括所有第二个值,BALANCED 包括所有第三个值,GROWTH 包括所有第四个值。本质上,我想要获得的是以下输出:

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

如何正确告诉Python要访问字典中的哪个值?下面的命令映射了所有值:

df['TARGET'] = df['ASSET_CLASS'].map(my_dict)

   STRATEGY ASSET_CLASS            TARGET
0  BALANCED    Corp EUR      [4, 6, 8, 7]
1     YIELD    Corp USD  [9, 7.5, 5.3, 6]
2    GROWTH      HG CHF      [5, 2, 3, 4]

非常感谢任何建议!非常感谢!


可以使用如下方法在 Pandas 中将具有多个值的字典映射到 DataFrame:

import pandas as pd

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

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

# 创建一个策略到索引的映射
strategy_map = {'BALANCED': 2, 'YIELD': 1, 'GROWTH': 3}

# 使用 lambda 函数应用映射
df['TARGET'] = df.apply(lambda row: my_dict[row['ASSET_CLASS']][strategy_map[row['STRATEGY']] - 1], axis=1)

print(df)

这将打印出:

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

以下是代码的工作原理:

  1. 创建策略到索引的映射:
  2. 我们创建了一个字典 strategy_map ,它将每个策略映射到 my_dict 值列表中的相应索引(从 1 开始)。

  3. 使用 apply() 和 lambda 函数:

  4. 我们使用 df.apply() 在 DataFrame 的每一行上应用 lambda 函数。
  5. lambda 函数接收每一行作为 row
  6. 它使用 row['ASSET_CLASS'] 访问 my_dict 中相应的列表。
  7. 然后,它使用 strategy_map[row['STRATEGY']] - 1 获取策略的正确索引,并从列表中检索相应的值。

这将确保根据 STRATEGY 列中指定的值选择正确的值。

标签:python,pandas,dataframe,dictionary,mapping
From: 78784635

相关文章

  • 如何使用 Python API 获取每个模型的活跃用户列表、最后登录信息
    我想通过PythonAPI获取我的dbt项目的所有模型中的活动或非活动用户列表。这可能吗?我尝试列出模型,但无法获取用户信息,如用户名、项目、以及上次活动或上次登录。不幸的是,dbt本身并不跟踪你所寻找的用户活动数据(最后登录、活跃用户等)。dbt的主要功能是转换数据,而不......
  • Python tkinter 窗口不断关闭,我不知道为什么
    我正在尝试制作一个有趣的小程序,其中每小时左右就会有一只毛茸茸的动物走过屏幕。我有一个主窗口,它启动一个循环,每小时左右播放一次动画/声音,但是在口袋妖怪第一次完成行走后,整个程序就会结束。我认为这可能与我设置tkinter窗口的方式有关,但我无法弄清楚。我认为在这里包含......
  • 用于自动访问 MongoDB Atlas CLI 的 Python 脚本
    我想编写一个Python脚本,以便普通用户可以访问他的数据库并从他的终端执行CRUD操作。我正在查看官方文档,但我有点迷失。有人可以给我指点基本教程来开始吗?当然,以下是如何构建Python脚本来访问MongoDBAtlasCLI的基本教程:先决条件:MongoDBAtlas......
  • Python实现简单学生登陆系统
     代码:importhashlibclassStudent:def__init__(self,username,password):#初始化学生对象,存储用户名和加密后的密码self.username=usernameself.password=hashlib.sha256(password.encode()).hexdigest()defcheck_passwo......
  • python猜数字游戏
    好的,下面是一个简单的小游戏代码示例,使用Python编写。这个游戏是一个猜数字游戏,玩家需要猜一个1到100之间的随机数。importrandomdefguess_number_game():print("欢迎来到猜数字游戏!")print("我已经想好了一个1到100之间的数字,请你猜一猜。")secret_num......
  • 【Python正则表达式】:文本解析与模式匹配
    文章目录1.正则表达式2.re模块3.修饰符3.元字符3-1字符匹配元字符3-2重复次数限定元字符3-3字符集合匹配元字符3-4分组元字符3-5边界匹配元字符3-6字符类别匹配元字符4.技巧4-1贪婪与非贪婪5.案例1.正则表达式正则表达式面向什么样的问题?1、判断一个字......
  • 仅需增加2行代码,Python量化策略速度提升20+倍!
    今天分享一个Python量化策略加速的小技巧,不用修改原有代码,只需在原有代码里新增2行,策略执行速度便可能提高20+倍,正文开始~现如今,无论是入门量化投资,还是做数据分析、机器学习和深度学习,Python成为了首选编程语言,直观的原因就是容易上手和资源丰富,但Python有个根深蒂固的标签,......
  • Python基础-Anaconda,Spyder,数据类型
    1、Python与Anaconda在想使用Python之前需先安装Python,以及PythonIDE和Python的库,而用Anaconda就可以一键安装。Anaconda包含了Python,常用的python库以及IDE,还具有强大的环境和python包的管理能力。PythonIDE(IntegratedDevelopmentEnvironment,集成开发环境)是一个为开发......
  • python实现图像特征提取算法2
    python实现广义Hough变换算法、Hough变换算法1.广义Hough变换算法详解算法步骤Python实现详细解释优缺点2.Hough变换算法详解算法步骤Python实现详细解释优缺点实现广义Hough变换算法(GeneralizedHoughTransform)可以用于检测任意形状的......
  • 使用Python自动备份MC服务器存档至轻量COS
    在存档意外炸档时,备份就显得尤为重要。本文以Minecraft1.18.2为例,教你如何使用轻量搭建一个MC服务器,并定时将存档备份入轻量COS,节省本地空间。前期准备一台安装了Linux原版系统的轻量(因为目前轻量COS仅支持挂载Linux系统镜像,不支持容器或自定义镜像)一个和轻量大区相同的轻......