0

0

基于ID列从含NaN值的DataFrame构建不同DataFrame

聖光之護

聖光之護

发布时间:2025-08-06 17:38:01

|

752人浏览过

|

来源于php中文网

原创

基于id列从含nan值的dataframe构建不同dataframe

本文旨在指导读者如何根据DataFrame中特定列(如'a'列)的非缺失值生成ID,并基于此ID将原始DataFrame拆分为多个仅包含特定列且剔除缺失值的新的DataFrame。通过示例代码,详细展示了如何利用cumsum()和dropna()方法高效地实现这一目标,并提供了重置索引的建议,以便更好地管理生成的数据。

在数据分析和处理过程中,经常会遇到需要根据某些规则将一个DataFrame拆分成多个子DataFrame的情况。当DataFrame中存在缺失值(NaN)时,拆分过程可能会变得更加复杂。本文将介绍一种基于特定列的非缺失值生成ID,并根据该ID将DataFrame拆分为多个子DataFrame的方法。

步骤详解

  1. 导入必要的库

    首先,确保你已经安装了 pandas 库。如果没有,可以使用 pip install pandas 命令进行安装。然后在 Python 脚本中导入 pandas:

    import pandas as pd
    import numpy as np  # 导入 numpy 用于创建 NaN 值
  2. 创建示例DataFrame

    为了演示,我们创建一个包含 NaN 值的 DataFrame:

    df = pd.DataFrame({'a':[10, np.nan, np.nan, 22, np.nan],
                       'b':[23, 12, 7, 4, np.nan],
                       'c':[13, np.nan, np.nan, np.nan, 65]})
    
    print(df)

    输出:

         a     b     c
    0  10.0  23.0  13.0
    1   NaN  12.0   NaN
    2   NaN   7.0   NaN
    3  22.0   4.0   NaN
    4   NaN   NaN  65.0
  3. 生成ID列

    关键在于根据 a 列的非 NaN 值来生成 id 列。使用 notna() 方法判断 a 列中的值是否为非 NaN,然后使用 cumsum() 方法计算累计和。这样,每个非 NaN 值都将作为一个新的 ID 的起始点。

    PNG Maker
    PNG Maker

    利用 PNG Maker AI 将文本转换为 PNG 图像。

    下载
    df['id'] = df['a'].notna().cumsum()
    print(df)

    输出:

         a     b     c  id
    0  10.0  23.0  13.0   1
    1   NaN  12.0   NaN   1
    2   NaN   7.0   NaN   1
    3  22.0   4.0   NaN   2
    4   NaN   NaN  65.0   2
  4. 创建子DataFrame

    现在,我们可以根据 id 列和需要的列创建子 DataFrame。使用 [['id', 'column_name']] 选择需要的列,然后使用 dropna() 方法删除包含 NaN 值的行。

    df_a = df[['id','a']].dropna()
    df_b = df[['id','b']].dropna()
    df_c = df[['id','c']].dropna()
    
    print("df_a:\n", df_a)
    print("df_b:\n", df_b)
    print("df_c:\n", df_c)

    输出:

    df_a:
        id     a
    0   1  10.0
    3   2  22.0
    df_b:
        id     b
    0   1  23.0
    1   1  12.0
    2   1   7.0
    3   2   4.0
    df_c:
        id     c
    0   1  13.0
    4   2  65.0
  5. 重置索引(可选)

    如果需要重置子 DataFrame 的索引,可以使用 reset_index(drop=True) 方法。drop=True 参数表示删除原来的索引列。

    df_a = df[['id','a']].dropna().reset_index(drop=True)
    print("df_a with reset index:\n", df_a)

    输出:

    df_a with reset index:
        id     a
    0   1  10.0
    1   2  22.0

完整代码示例

import pandas as pd
import numpy as np

# 创建示例 DataFrame
df = pd.DataFrame({'a':[10, np.nan, np.nan, 22, np.nan],
                   'b':[23, 12, 7, 4, np.nan],
                   'c':[13, np.nan, np.nan, np.nan, 65]})

# 生成 ID 列
df['id'] = df['a'].notna().cumsum()

# 创建子 DataFrame
df_a = df[['id','a']].dropna().reset_index(drop=True)
df_b = df[['id','b']].dropna().reset_index(drop=True)
df_c = df[['id','c']].dropna().reset_index(drop=True)

# 打印结果
print("df_a:\n", df_a)
print("df_b:\n", df_b)
print("df_c:\n", df_c)

注意事项

  • 确保用于生成ID的列(例如本例中的 a 列)包含足够的信息来区分不同的ID组。
  • dropna() 方法默认删除包含任何 NaN 值的行。如果只需要删除特定列中的 NaN 值,可以使用 subset 参数指定列名。例如:df.dropna(subset=['b'])。
  • 在处理大型 DataFrame 时,效率至关重要。pandas 提供了许多优化技巧,例如使用矢量化操作代替循环。

总结

本文介绍了如何根据 DataFrame 中特定列的非缺失值生成 ID,并基于该 ID 将 DataFrame 拆分为多个子 DataFrame。这种方法在数据清洗和预处理过程中非常有用,可以帮助你更好地组织和分析数据。通过合理运用 notna()、cumsum() 和 dropna() 等 pandas 方法,可以高效地完成这项任务。 记住,在实际应用中,需要根据具体情况调整代码,以满足不同的需求。

热门AI工具

更多
DeepSeek
DeepSeek

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

豆包大模型
豆包大模型

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

通义千问
通义千问

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

腾讯元宝
腾讯元宝

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

文心一言
文心一言

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

讯飞写作
讯飞写作

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

即梦AI
即梦AI

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

ChatGPT
ChatGPT

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

相关专题

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

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

57

2025.12.04

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

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

339

2023.10.09

更新pip版本
更新pip版本

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

413

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、保存并关闭文件即可。

761

2024.12.23

python升级pip
python升级pip

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

349

2025.07.23

php中文乱码如何解决
php中文乱码如何解决

本文整理了php中文乱码如何解决及解决方法,阅读节专题下面的文章了解更多详细内容。

1

2026.01.28

Java 消息队列与异步架构实战
Java 消息队列与异步架构实战

本专题系统讲解 Java 在消息队列与异步系统架构中的核心应用,涵盖消息队列基本原理、Kafka 与 RabbitMQ 的使用场景对比、生产者与消费者模型、消息可靠性与顺序性保障、重复消费与幂等处理,以及在高并发系统中的异步解耦设计。通过实战案例,帮助学习者掌握 使用 Java 构建高吞吐、高可靠异步消息系统的完整思路。

1

2026.01.28

Python 自然语言处理(NLP)基础与实战
Python 自然语言处理(NLP)基础与实战

本专题系统讲解 Python 在自然语言处理(NLP)领域的基础方法与实战应用,涵盖文本预处理(分词、去停用词)、词性标注、命名实体识别、关键词提取、情感分析,以及常用 NLP 库(NLTK、spaCy)的核心用法。通过真实文本案例,帮助学习者掌握 使用 Python 进行文本分析与语言数据处理的完整流程,适用于内容分析、舆情监测与智能文本应用场景。

23

2026.01.27

拼多多赚钱的5种方法 拼多多赚钱的5种方法
拼多多赚钱的5种方法 拼多多赚钱的5种方法

在拼多多上赚钱主要可以通过无货源模式一件代发、精细化运营特色店铺、参与官方高流量活动、利用拼团机制社交裂变,以及成为多多进宝推广员这5种方法实现。核心策略在于通过低成本、高效率的供应链管理与营销,利用平台社交电商红利实现盈利。

120

2026.01.26

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.3万人学习

Django 教程
Django 教程

共28课时 | 3.6万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.3万人学习

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

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