0

0

使用 Pandas Groupby 和 Merge 实现数据帧的值映射

聖光之護

聖光之護

发布时间:2025-10-17 10:04:11

|

385人浏览过

|

来源于php中文网

原创

使用 pandas groupby 和 merge 实现数据帧的值映射

本文档旨在指导读者如何利用 Pandas 的 groupby 和 merge 功能,将一个数据帧中的值映射到另一个数据帧,并检查特定个体是否包含了目标词汇。通过交叉连接创建所有可能的组合,并使用左连接和填充缺失值,最终生成包含完整信息的汇总数据帧。

准备工作

首先,确保你已经安装了 Pandas 库。如果没有安装,可以使用 pip 进行安装:

pip install pandas

数据准备

为了演示,我们创建两个 Pandas 数据帧:df 包含每个人的词汇选择和对应计数,word_df 包含一个完整的词汇列表。

import pandas as pd

df = pd.DataFrame({
    'person': [1, 1, 1, 2, 3, 4, 4, 4, 4],
    'word': ['apple', 'orange', 'pear', 'apple', 'grape', 'orange', 'apple', 'pear', 'berry'],
    'count': [1, 1, 1, 1, 1, 1, 1, 1, 1]
})

word_list = ['apple', 'orange', 'pear', 'berry', 'grape']
word_df = pd.DataFrame({'word': word_list})

我们的目标是创建一个新的数据帧,其中包含每个人和词汇列表中所有词汇的组合,并标记出每个人实际选择的词汇(count 为 1)和未选择的词汇(count 为 0)。

实现步骤

1. 创建所有可能的组合

首先,我们需要创建一个包含所有 person 和 word 组合的数据帧。这可以通过 merge 函数的 how='cross' 参数来实现,它执行一个交叉连接。

all_person_word_combos = word_df.merge(df['person'].drop_duplicates(), how='cross')

这行代码将 word_df (包含所有词汇) 和 df['person'].drop_duplicates() (包含所有不重复的人员ID) 进行交叉连接,生成一个包含所有可能的人员和词汇组合的数据帧。

2. 合并数据帧

接下来,我们将上一步创建的组合数据帧与原始数据帧 df 进行左连接。这样,如果某个 person 选择了某个 word,那么对应的 count 值将被填充;否则,count 值将为 NaN。

Winston AI
Winston AI

强大的AI内容检测解决方案

下载
final_result = (
  all_person_word_combos.
  merge(df, 
        how='left', 
        on=['word', 'person'])
)

这里,how='left' 指定了左连接,on=['word', 'person'] 指定了连接的键。

3. 填充缺失值

最后,我们需要将 NaN 值替换为 0,并按照 person 和 word 进行排序。

final_result = final_result.fillna(0).sort_values(['person','word'])

fillna(0) 将所有 NaN 值替换为 0,表示该 person 没有选择对应的 word。 sort_values(['person','word']) 按照 person 和 word 列对结果进行排序,使结果更易于阅读。

4. 完整代码示例

import pandas as pd

df = pd.DataFrame({
    'person': [1, 1, 1, 2, 3, 4, 4, 4, 4],
    'word': ['apple', 'orange', 'pear', 'apple', 'grape', 'orange', 'apple', 'pear', 'berry'],
    'count': [1, 1, 1, 1, 1, 1, 1, 1, 1]
})

word_list = ['apple', 'orange', 'pear', 'berry', 'grape']
word_df = pd.DataFrame({'word': word_list})

all_person_word_combos = word_df.merge(df['person'].drop_duplicates(), how='cross')
final_result = (
  all_person_word_combos.
  merge(df, 
        how='left', 
        on=['word', 'person']).
  fillna(0).
  sort_values(['person','word'])
)

print(final_result)

结果

最终的结果数据帧 final_result 包含了每个人和词汇列表中所有词汇的组合,以及对应的 count 值(0 或 1),清晰地展示了每个人选择了哪些词汇。

性能考虑

上述方法在数据量较小时表现良好。如果数据量很大,性能可能会成为瓶颈。可以考虑使用其他优化技术,例如使用 set_index 和 reindex 来提高性能。

总结

本文介绍了如何使用 Pandas 的 groupby 和 merge 功能,将一个数据帧中的值映射到另一个数据帧,并检查特定个体是否包含了目标词汇。通过交叉连接、左连接和填充缺失值,我们可以生成包含完整信息的汇总数据帧。这种方法在数据分析和处理中非常有用,可以帮助我们更好地理解和利用数据。

相关专题

更多
Python 时间序列分析与预测
Python 时间序列分析与预测

本专题专注讲解 Python 在时间序列数据处理与预测建模中的实战技巧,涵盖时间索引处理、周期性与趋势分解、平稳性检测、ARIMA/SARIMA 模型构建、预测误差评估,以及基于实际业务场景的时间序列项目实操,帮助学习者掌握从数据预处理到模型预测的完整时序分析能力。

49

2025.12.04

pip安装使用方法
pip安装使用方法

安装步骤:1、确保Python已经正确安装在您的计算机上;2、下载“get-pip.py”脚本;3、按下Win + R键,然后输入cmd并按下Enter键来打开命令行窗口;4、在命令行窗口中,使用cd命令切换到“get-pip.py”所在的目录;5、执行安装命令;6、验证安装结果即可。大家可以访问本专题下的文章,了解pip安装使用方法的更多内容。

333

2023.10.09

更新pip版本
更新pip版本

更新pip版本方法有使用pip自身更新、使用操作系统自带的包管理工具、使用python包管理工具、手动安装最新版本。想了解更多相关的内容,请阅读专题下面的文章。

397

2024.12.20

pip设置清华源
pip设置清华源

设置方法:1、打开终端或命令提示符窗口;2、运行“touch ~/.pip/pip.conf”命令创建一个名为pip的配置文件;3、打开pip.conf文件,然后添加“[global];index-url = https://pypi.tuna.tsinghua.edu.cn/simple”内容,这将把pip的镜像源设置为清华大学的镜像源;4、保存并关闭文件即可。

739

2024.12.23

python升级pip
python升级pip

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

337

2025.07.23

counta和count的区别
counta和count的区别

Count函数用于计算指定范围内数字的个数,而CountA函数用于计算指定范围内非空单元格的个数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

192

2023.11.20

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

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

450

2023.07.04

数据分析方法有哪几种
数据分析方法有哪几种

数据分析方法有:1、描述性统计分析;2、探索性数据分析;3、假设检验;4、回归分析;5、聚类分析。本专题为大家提供数据分析方法的相关的文章、下载、课程内容,供大家免费下载体验。

262

2023.08.07

俄罗斯搜索引擎Yandex最新官方入口网址
俄罗斯搜索引擎Yandex最新官方入口网址

Yandex官方入口网址是https://yandex.com;用户可通过网页端直连或移动端浏览器直接访问,无需登录即可使用搜索、图片、新闻、地图等全部基础功能,并支持多语种检索与静态资源精准筛选。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1

2025.12.29

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Java 教程
Java 教程

共578课时 | 39.2万人学习

国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 0.9万人学习

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

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