0

0

如何基于行列匹配从宽格式DataFrame中提取值并填充新列

碧海醫心

碧海醫心

发布时间:2026-03-06 15:57:01

|

422人浏览过

|

来源于php中文网

原创

如何基于行列匹配从宽格式DataFrame中提取值并填充新列

本文介绍使用pandas将宽格式DataFrame(年份为列名)中的值,根据另一DataFrame中对应的行标签(如NAME)和列名(如YEAR)动态映射到新列的高效方法,避免循环,核心依赖set_index().stack()与merge()组合。

本文介绍使用pandas将宽格式dataframe(年份为列名)中的值,根据另一dataframe中对应的行标签(如name)和列名(如year)动态映射到新列的高效方法,避免循环,核心依赖`set_index().stack()`与`merge()`组合。

在实际数据分析中,常遇到“宽表→长表”匹配场景:一个DataFrame(如df2)以类别(NAME)为行索引、时间维度(如2000, 2001, 2002)为列名存储指标值;另一个DataFrame(如df1)则包含相同类别的多条记录及对应的时间标签(YEAR),需据此查表生成新字段(如SCORE)。直接merge无法解决列名参与匹配的问题,此时应先将宽表重塑为规范的长格式,再执行标准连接。

关键步骤如下:

  1. 将宽表df2转换为长格式:使用set_index("NAME").stack()将列名(2000, 2001, 2002)转为行索引的第二级,并展开为一列;再用reset_index()恢复为普通列,并重命名新列;
  2. 与df1按NAME和YEAR合并:确保两表具有完全一致的键字段名(如将堆叠后的层级列命名为YEAR),即可通过merge完成精准映射。

以下是完整可运行示例代码:

68爱写
68爱写

专业高质量AI4.0论文写作平台,免费生成大纲,支持无线改稿

下载
import pandas as pd

# 构造示例数据
df1 = pd.DataFrame({
    "NAME": ["Anna", "Mary", "Paul", "Paul", "Mary", "Anna", "Anna", "Mary", "Paul"],
    "YEAR": [2002, 2001, 2000, 2001, 2002, 2001, 2000, 2000, 2002]
})

df2 = pd.DataFrame({
    "NAME": ["Anna", "Mary", "Paul"],
    2000: [5, 3, 2],
    2001: [4, 2, 3],
    2002: [3, 5, 4]
})

# 步骤1:重塑df2为长格式
df2_long = (df2.set_index("NAME")
              .stack()
              .reset_index(name="SCORE")
              .rename(columns={"level_1": "YEAR"}))

# 步骤2:与df1合并
result = df1.merge(df2_long, on=["NAME", "YEAR"])

print(result)

输出结果为:

   NAME  YEAR  SCORE
0  Anna  2002      3
1  Mary  2001      2
2  Paul  2000      2
3  Paul  2001      3
4  Mary  2002      5
5  Anna  2001      4
6  Anna  2000      5
7  Mary  2000      3
8  Paul  2002      4

注意事项:

  • stack()默认会将所有非索引列压平,若df2含多余列,建议先select_dtypes(include='number')过滤或显式指定列;
  • YEAR列在df2_long中默认为str类型(若原始列为整数,stack()后仍保持原类型),但务必确保与df1["YEAR"]类型一致,否则merge可能静默失败——可统一用astype(int)校验;
  • 替代方案包括melt()(更语义化),但set_index().stack()在处理单指标宽表时更简洁;若需保留多变量,应优先选用melt(id_vars="NAME", var_name="YEAR", value_name="SCORE")。

该方法完全向量化,性能远优于Python循环,是pandas处理“列名即条件”的标准范式。

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

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

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

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

78

2025.12.04

Python 数据清洗与预处理实战
Python 数据清洗与预处理实战

本专题系统讲解 Python 在数据清洗与预处理中的核心技术,包括使用 Pandas 进行缺失值处理、异常值检测、数据格式化、特征工程与数据转换,结合 NumPy 高效处理大规模数据。通过实战案例,帮助学习者掌握 如何处理混乱、不完整数据,为后续数据分析与机器学习模型训练打下坚实基础。

12

2026.01.31

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

950

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

604

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

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

294

2025.08.29

C++中int的含义
C++中int的含义

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

212

2025.08.29

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

434

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

600

2023.08.10

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

1

2026.03.06

热门下载

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

精品课程

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

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