讲师中心 微信公众号
AI工具推荐 视频效率加速

如何在 Pandas 中保留前两列不变,将剩余多列按行匹配堆叠为单列

小静同学_6010

小静同学_6010

发布时间:2026-09-12 09:53:21

|

971人浏览过

|

来源于php中文网

原创

如何在 Pandas 中保留前两列不变,将剩余多列按行匹配堆叠为单列

本文介绍使用 pandas.melt() 配合条件筛选,将除 id 和 date 外的多列(如 '1', '2', '3')按“列名与 id 值对应”规则,精准堆叠为一列 value 的完整方法。

本文介绍使用 `pandas.melt()` 配合条件筛选,将除 `id` 和 `date` 外的多列(如 '1', '2', '3')按“列名与 id 值对应”规则,精准堆叠为一列 `value` 的完整方法。

在数据处理中,常遇到宽表结构:前几列(如 id、date)为标识维度,后续大量数值列以数字命名(如 '1', '2', '3', …),且每列逻辑上对应某类 ID 的观测值。目标是将这些数字列“纵向压缩”,但不是简单拼接,而是要求:对每一行,仅提取与该行 id 值同名的列中的值(例如 id=2 的行,取列 '2' 的值;id=3 取列 '3' 的值),其余列值忽略。

这无法通过 stack() 直接实现(因其不支持跨列条件映射),而 melt() 是更自然的选择——它能将多列转为长格式,并生成 variable 列记录原列名,便于后续条件过滤。

✅ 正确实现步骤

  1. 使用 melt() 展开:指定 id_vars=['id', 'date'] 保留这两列为标识列,var_name='id2' 将原列名(如 '1', '2')存入新列;
  2. 条件筛选匹配行:利用 df['id'] == df['id2'].astype(int) 筛出 id 值与列名数值一致的行;
  3. 清理冗余列:丢弃临时列 id2,保留 id, date, value。
import pandas as pd
import numpy as np

# 构造示例数据
df = pd.DataFrame({
    'id': [1, 1, 1, 2, 2, 2, 3, 3, 3],
    'date': ['1/1/00', '1/2/00', '1/3/00'] * 3,
    '1': [np.nan, 100.0, np.nan] * 3,
    '2': [200, 200, 200] * 3,
    '3': [300, 300, 300] * 3
})

# 执行熔解 + 条件筛选
melted = df.melt(id_vars=['id', 'date'], var_name='id2', value_name='value')
result = melted[melted['id'] == melted['id2'].astype(int)].drop(columns='id2').reset_index(drop=True)

print(result)

输出结果:

   id    date  value
0   1  1/1/00    NaN
1   1  1/2/00  100.0
2   1  1/3/00    NaN
3   2  1/1/00  200.0
4   2  1/2/00  200.0
5   2  1/3/00  200.0
6   3  1/1/00  300.0
7   3  1/2/00  300.0
8   3  1/3/00  300.0

⚠️ 注意事项

  • 列名类型一致性:确保数字列名(如 '1', '2')可安全转为整型;若含非数字列名(如 'X1'),需先清洗或改用正则匹配;
  • 缺失值处理:NaN 会自然保留,无需额外操作;但若需统一填充,可在 .drop(columns='id2') 后链式调用 .fillna(0);
  • 性能提示:对超大宽表(数百列),melt() 后筛选比循环更高效;避免使用 apply(lambda row: row[str(row['id'])]),易触发 SettingWithCopyWarning 且速度慢;
  • 扩展性:若列名代表类别而非 ID(如 'A', 'B', 'C'),只需将匹配逻辑改为 row['category'] == row['id2'] 即可复用本方案。

此方法简洁、可读性强,是 Pandas 中处理“列名即键”的典型宽→长转换场景的标准实践。

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

热门AI工具

更多
AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

相关专题

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

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

320

2025.12.04

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

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

232

2026.01.31

Python数据分析与Pandas高级实战
Python数据分析与Pandas高级实战

本专题围绕 Python 数据分析展开,系统讲解 Pandas 的高级用法,包括数据清洗、透视表、时间序列分析以及多表合并与分组操作。通过实战案例,帮助开发者掌握高效处理与分析数据的方法,提高数据处理效率与分析能力。

411

2026.04.13

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

80

2026.09.30

LLVM RISC-V参数配置教程
LLVM RISC-V参数配置教程

本专题介绍LLVM对RISC-V基础ISA和扩展的支持方式,涵盖RV32、RV64、标准扩展、实验性扩展、厂商扩展、-menable-experimental-extensions和版本差异。

80

2026.09.30

LLVM IR中间表示入门指南
LLVM IR中间表示入门指南

本专题整理LLVM IR的核心概念,包括中间表示作用、模块结构、函数、基本块、SSA形式、类型系统和常见语法,帮助新手理解LLVM编译流程中的关键层。

40

2026.09.30

PDF转图片方法
PDF转图片方法

需要把 PDF 页面用于上传、预览、分享或图片归档时,PDF 转图片方法专题整理 JPG/PNG 格式选择、逐页导出、清晰度设置、批量下载和结果检查等流程,帮助用户稳定完成 PDF 图片化处理。

40

2026.09.30

PixTV AI视频生成与无限画布创作
PixTV AI视频生成与无限画布创作

PixTV专题整理AI视频与视觉内容创作相关功能使用教程,涵盖AI生图、视频生成、无限画布、多模型创作、素材管理、声音音乐及视频剪辑等功能,帮助用户快速掌握PixTV从创意到成片的完整制作方法。

60

2026.09.29

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

280

2026.09.23

热门下载

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

精品课程

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn