0

0

使用字典值按键划分DataFrame列的多种方法

碧海醫心

碧海醫心

发布时间:2025-07-13 17:24:20

|

744人浏览过

|

来源于php中文网

原创

使用字典值按键划分dataframe列的多种方法

本文介绍了如何根据DataFrame中某一列的值(键)去字典中查找对应的值,并将DataFrame的另一列除以该值。针对字典中不存在对应键的情况,提供了多种处理策略,避免出现NaN值,确保数据处理的准确性和完整性。

在数据分析和处理中,经常需要根据某些ID将DataFrame中的数值进行调整。例如,你可能有一个DataFrame包含integer_id和delta两列,并且有一个字典,该字典将integer_id映射到某个比例因子。你的目标是根据字典中的比例因子来调整delta列的值。如果integer_id在字典中找不到对应的比例因子,则保持delta列的值不变。

下面将介绍几种实现该目标的有效方法。

方法一:使用apply函数

apply函数可以逐行或逐列地应用自定义函数到DataFrame。这使得我们可以访问每一行的integer_id,并在字典中查找对应的比例因子。如果integer_id存在于字典中,则将delta除以该比例因子;否则,保持delta不变。

import pandas as pd

df = pd.DataFrame({
  "integer_id": [1, 2, 3],
  "delta": [10, 20, 30]
})

d = {1: 0.5, 3: 0.25}

df['delta'] = df.apply(lambda r: r['delta']/d.get(r['integer_id'], 1), axis=1)

print(df)

这段代码首先定义了一个DataFrame df 和一个字典 d。然后,使用 apply 函数遍历 DataFrame 的每一行。对于每一行,lambda 函数 lambda r: r['delta']/d.get(r['integer_id'], 1) 获取 delta 列的值,并将其除以字典 d 中与 integer_id 对应的 value。d.get(r['integer_id'], 1) 的作用是:如果 integer_id 存在于字典 d 中,则返回对应的 value;否则,返回默认值 1,保证 delta 列的值不会被除以 0 或 NaN。axis=1 参数指定 apply 函数按行应用。

方法二:使用map函数和fillna函数

map函数可以将DataFrame的某一列的值映射到另一个值,通常用于替换或转换数据。fillna函数用于填充缺失值(NaN)。

LALALAND
LALALAND

AI驱动的时尚服装设计平台

下载
import pandas as pd

df = pd.DataFrame({
  "integer_id": [1, 2, 3],
  "delta": [10, 20, 30]
})

d = {1: 0.5, 3: 0.25}

df["delta"] = df["delta"] / df.integer_id.map(d).fillna(1)

print(df)

这段代码首先使用 df.integer_id.map(d) 将 integer_id 列的值映射到字典 d 中对应的 value。如果 integer_id 不存在于字典 d 中,则映射结果为 NaN。然后,使用 fillna(1) 将 NaN 值替换为 1,保证 delta 列的值不会被除以 NaN。最后,将 delta 列除以映射后的值。

方法三:使用replace函数和fillna函数

replace函数可以替换DataFrame中的特定值。

import pandas as pd

df = pd.DataFrame({
  "integer_id": [1, 2, 3],
  "delta": [10, 20, 30]
})

d = {1: 0.5, 3: 0.25}

divisor = df['integer_id'].replace(d)
divisor = divisor.apply(lambda x: d[x] if x in d else 1)
df['delta'] = df['delta'] / divisor

print(df)

这段代码首先使用 df['integer_id'].replace(d) 尝试将 integer_id 列的值替换为字典 d 中对应的 value。但是,由于 replace 函数默认情况下只替换完全匹配的值,因此需要结合 apply 函数和条件判断来实现目标。对于 integer_id 存在于字典 d 中的情况,使用 d[x] 获取对应的 value;否则,返回默认值 1。最后,将 delta 列除以替换后的值。

总结与注意事项

以上三种方法都可以实现根据字典值按键划分DataFrame列的目标。

  • apply函数的灵活性最高,可以处理复杂的逻辑,但通常性能略低于其他方法。
  • map函数和fillna函数的组合简洁高效,适用于简单的映射和缺失值处理。
  • replace函数虽然可以替换值,但需要结合其他函数才能实现目标。

在选择方法时,应根据实际情况权衡代码的可读性、性能和灵活性。 此外,务必注意处理字典中不存在对应键的情况,避免出现NaN值,确保数据处理的准确性和完整性。

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
lambda表达式
lambda表达式

Lambda表达式是一种匿名函数的简洁表示方式,它可以在需要函数作为参数的地方使用,并提供了一种更简洁、更灵活的编码方式,其语法为“lambda 参数列表: 表达式”,参数列表是函数的参数,可以包含一个或多个参数,用逗号分隔,表达式是函数的执行体,用于定义函数的具体操作。本专题为大家提供lambda表达式相关的文章、下载、课程内容,供大家免费下载体验。

202

2023.09.15

python lambda函数
python lambda函数

本专题整合了python lambda函数用法详解,阅读专题下面的文章了解更多详细内容。

189

2025.11.08

Python lambda详解
Python lambda详解

本专题整合了Python lambda函数相关教程,阅读下面的文章了解更多详细内容。

41

2026.01.05

golang map内存释放
golang map内存释放

本专题整合了golang map内存相关教程,阅读专题下面的文章了解更多相关内容。

73

2025.09.05

golang map相关教程
golang map相关教程

本专题整合了golang map相关教程,阅读专题下面的文章了解更多详细内容。

28

2025.11.16

golang map原理
golang map原理

本专题整合了golang map相关内容,阅读专题下面的文章了解更多详细内容。

58

2025.11.17

java判断map相关教程
java判断map相关教程

本专题整合了java判断map相关教程,阅读专题下面的文章了解更多详细内容。

34

2025.11.27

数据分析的方法
数据分析的方法

数据分析的方法有:对比分析法,分组分析法,预测分析法,漏斗分析法,AB测试分析法,象限分析法,公式拆解法,可行域分析法,二八分析法,假设性分析法。php中文网为大家带来了数据分析的相关知识、以及相关文章等内容。

460

2023.07.04

c++主流开发框架汇总
c++主流开发框架汇总

本专题整合了c++开发框架推荐,阅读专题下面的文章了解更多详细内容。

25

2026.01.09

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号