利用Pandas进行条件替换与向前填充的代码实现

 更新时间:2025年07月31日 10:00:36   作者:袁袁袁袁满  
这篇文章主要介绍了如何用Pandas的mask()、ffill()和astype()实现:当项,列非零时,用上一行的值填充,适用于数据清洗和时间序列处理等场景,展示了条件替换与填充的组合应用及变体方法,需要的朋友可以参考下

一、需求

示例数据:

   项  目
0  1  0
1  0  1
2  0  2
3  0  3
4  0  4

使用 Pandas 实现当 目 列的值不为 0 时,将当前行的 项 列值修改为上一行的 项 列值:

   项  目
0  1  0
1  1  1
2  1  2
3  1  3
4  1  4

二、实现代码

案例代码

import pandas as pd

# 创建示例数据
df = pd.DataFrame({
    '项': [1, 0, 0, 0, 0],
    '目': [0, 1, 2, 3, 4]
})
print(df)

# 当`目`列不为0时,`项`列的值被替换为NaN,然后向前填充
df['项'] = df['项'].mask(df['目'] != 0).ffill().astype(int)

print(df)

详细解释

1. 导入库和创建数据

import pandas as pd

# 创建示例数据
df = pd.DataFrame({
    '项': [1, 0, 0, 0, 0],
    '目': [0, 1, 2, 3, 4]
})
  • 首先导入Pandas库并简称为pd
  • 创建一个DataFrame df,包含两列:
    • "项"列:初始值为[1, 0, 0, 0, 0]
    • "目"列:初始值为[0, 1, 2, 3, 4]

初始数据如下:

   项  目
0  1  0
1  0  1
2  0  2
3  0  3
4  0  4

2. 条件替换与填充

df['项'] = df['项'].mask(df['目'] != 0).ffill().astype(int)

这行代码执行了多个操作,我们将其分解:

a. 条件掩码 - mask()

df['项'].mask(df['目'] != 0)

  • df['目'] != 0 创建一个布尔Series:[False, True, True, True, True]
  • mask()函数会用NaN替换满足条件(True)的位置
  • 结果:"项"列变为 [1, NaN, NaN, NaN, NaN]

b. 向前填充 - ffill()

.ffill()

  • 向前填充(Forward Fill)方法会用前一个有效值填充NaN
  • 对于我们的数据:
    • 第一个值是1(保持不变)
    • 后续NaN被前一个有效值1填充
  • 结果:"项"列变为 [1, 1, 1, 1, 1]

c. 类型转换 - astype(int)

.astype(int)

  • 将填充后的浮点数(因为NaN是浮点类型)转换为整数
  • 最终"项"列变为 [1, 1, 1, 1, 1]

3. 打印结果

print(df)

输出结果:

   项  目
0  1  0
1  1  1
2  1  2
3  1  3
4  1  4

三、实际应用场景

这种操作在实际数据处理中很有用,例如:

  1. 数据清洗:当某列(如"目")有特定值时,需要重置另一列(如"项")的值
  2. 时间序列处理:在某个事件发生后(如"目"列不为0表示事件发生),需要保持某个状态(如"项"列的值)
  3. 标记传播:将某个标记从特定点向前传播

四、可能的变体

  1. 向后填充:使用.bfill()而不是.ffill()
  2. 不同条件:可以修改mask的条件逻辑
  3. 填充特定值:可以使用.fillna()填充特定值而非前向填充

五、总结

这段代码展示了Pandas中几个强大功能的组合使用:

  • mask():基于条件替换值
  • ffill():向前填充缺失值
  • astype():数据类型转换

通过这种组合,可以高效地实现复杂的数据转换逻辑,这在数据预处理和分析中非常常见。理解这些基本操作的组合方式,可以帮助我们更灵活地处理各种数据清洗和转换任务。

以上就是利用Pandas进行条件替换与向前填充的代码实现的详细内容,更多关于Pandas条件替换与向前填充的资料请关注脚本之家其它相关文章!

相关文章

  • Python学习之名字,作用域,名字空间(下)

    Python学习之名字,作用域,名字空间(下)

    这篇文章主要介绍了Python学习之名字,作用域,名字空间,紧接上一篇文章内容展开全文,需要的小伙伴可以参考一下,希望对你的学习有所帮助
    2022-05-05
  • Python通过正则表达式选取callback的方法

    Python通过正则表达式选取callback的方法

    这篇文章主要介绍了Python通过正则表达式选取callback的方法,涉及Python正则表达式及回调函数的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • Python爬虫中的并发编程详解

    Python爬虫中的并发编程详解

    Python爬虫中的并发编程是一种优化爬取速度、解决阻塞问题、优化资源利用的方式。常用的并发编程模块包括多线程、多进程、协程等,通过并发处理多个任务,可以提高爬取效率,节省爬虫资源利用成本。同时,还需注意线程安全、共享资源问题等并发编程中的常见陷阱
    2023-05-05
  • python中的脚本性能分析

    python中的脚本性能分析

    这篇文章主要介绍了python中的脚本性能分析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • Python中函数的创建与调用你了解吗

    Python中函数的创建与调用你了解吗

    这篇文章主要为大家详细介绍了Python中函数的创建与调用,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • python实现对数据公钥加密与私钥解密

    python实现对数据公钥加密与私钥解密

    这篇文章主要为大家详细介绍了如何使用python实现对数据公钥加密与私钥解密,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-06-06
  • python多线程超详细详解

    python多线程超详细详解

    这篇文章主要介绍了python多线程超详细详解,多线程这个知识点非常重要,想了解的同学可以参考下
    2021-04-04
  • 利用python打印出菱形、三角形以及矩形的方法实例

    利用python打印出菱形、三角形以及矩形的方法实例

    最近在开发中遇到一个问题,需要利用python实现菱形、三角形以及矩形等形状,发现网上这方面的资料较少,所以总结分享下,这篇文章主要给大家介绍了关于利用python打印出菱形、三角形以及矩形的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-08-08
  • Python 多线程Threading初学教程

    Python 多线程Threading初学教程

    多线程可简单理解为同时执行多个任务。本文给大家分享Python 多线程Threading初学教程实例详解,感兴趣的朋友一起学习吧
    2017-08-08
  • Python实现五子棋人机对战 和人人对战

    Python实现五子棋人机对战 和人人对战

    这篇文章主要介绍了Python实现五子棋人机对战 和人人对战,通过定义黑白子,落子位置以及获胜规则展开详细内容,需要的小伙伴可以参考一下
    2022-05-05

最新评论