使用 Pandas Groupby 和 Transform 实现条件赋值

聖光之護
发布: 2025-08-14 15:26:40
原创
1027人浏览过

使用 pandas groupby 和 transform 实现条件赋值

本文介绍了如何使用 Pandas 的 groupby() 和 transform() 函数,根据特定条件(例如,每月的值)创建一个新的列。通过 Series.map 和布尔索引,以及结合 GroupBy.transform 和 Series.where 的方法,可以高效地实现分组条件赋值,并提供了相应的代码示例。

在数据分析中,经常需要根据分组信息,并结合特定条件,为 DataFrame 创建新的列。Pandas 提供了强大的 groupby() 和 transform() 函数,可以灵活地实现这类需求。本文将介绍两种使用这两种函数实现条件赋值的方法。

方法一:使用 Series.map 和布尔索引

这种方法的核心思路是:

360智图
360智图

AI驱动的图片版权查询平台

360智图 143
查看详情 360智图
  1. 首先,根据条件筛选出需要的值,并将其设置为 Series 的索引。
  2. 然后,使用 Series.map 函数,将分组列的值映射到对应的目标值。

以下是具体的代码示例:

import pandas as pd

data = pd.DataFrame({
    'Group': ['A', 'A', 'A', 'A', 'B', 'B'],
    'Month': [1, 2, 3, 4, 1, 2],
    'Value': [100, 300, 700, 750, 200, 400]
})

# 筛选出 Month 为 2 的行,并将 'Group' 列设置为索引,'Value' 列作为值
s = data[data['Month'].eq(2)].set_index('Group')['Value']

# 使用 map 函数,将 'Group' 列的值映射到对应的 'Value'
data['Desired_Result'] = data['Group'].map(s)

print(data)
登录后复制

这段代码首先创建了一个名为 s 的 Series,其中只包含 Month 为 2 的数据,并且 Group 列作为索引,Value 列作为数据。然后,data['Group'].map(s) 将 data DataFrame 中 Group 列的每个值,映射到 s Series 中对应索引的值,并将结果赋值给新的列 Desired_Result。

方法二:使用 GroupBy.transform 和 Series.where

这种方法的核心思路是:

  1. 使用 Series.where 函数,根据条件筛选出需要的值,将不满足条件的值替换为 NaN。
  2. 然后,使用 groupby() 和 transform() 函数,对每个分组应用 first() 函数,获取第一个非 NaN 值。

以下是具体的代码示例:

import pandas as pd

data = pd.DataFrame({
    'Group': ['A', 'A', 'A', 'A', 'B', 'B'],
    'Month': [1, 2, 3, 4, 1, 2],
    'Value': [100, 300, 700, 750, 200, 400]
})

# 使用 where 函数,将 Month 不为 2 的行的 'Value' 列的值替换为 NaN
s = data['Value'].where(data['Month'].eq(2))

# 使用 groupby 和 transform 函数,对每个分组应用 first 函数,获取第一个非 NaN 值
data['Desired_Result'] = s.groupby(data['Group']).transform('first')

print(data)
登录后复制

这段代码首先使用 data['Value'].where(data['Month'].eq(2)) 创建了一个新的 Series s,其中 Month 不等于 2 的行的 Value 值被替换为 NaN。然后,s.groupby(data['Group']).transform('first') 对 s Series 按照 Group 列进行分组,并对每个分组应用 first 函数,获取第一个非 NaN 值,并将结果赋值给新的列 Desired_Result。

注意事项:

  • 使用 GroupBy.transform('first') 时,如果分组中没有满足条件的行,则 Desired_Result 列的值将为 NaN。
  • Series.map 方法通常比 GroupBy.transform 方法更快,尤其是在数据量较大时。

总结:

本文介绍了两种使用 Pandas 的 groupby() 和 transform() 函数,根据特定条件创建新的列的方法。选择哪种方法取决于具体的需求和数据特点。Series.map 更加简洁高效,而 GroupBy.transform 则更加灵活,可以处理更复杂的条件。在实际应用中,可以根据具体情况选择最合适的方法。

以上就是使用 Pandas Groupby 和 Transform 实现条件赋值的详细内容,更多请关注php中文网其它相关文章!

相关标签:
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

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