有条件替换 Pandas [重复]

2024-11-29 08:42:00
admin
原创
118
摘要:问题描述:我有一个 DataFrame,我想将特定列中超过某个值的值替换为零。我曾以为这是实现此目的的一种方法:df[df.my_channel > 20000].my_channel = 0 如果我将通道复制到新的数据框中,这很简单:df2 = df.my_channel df2[df2 >...

问题描述:

我有一个 DataFrame,我想将特定列中超过某个值的值替换为零。我曾以为这是实现此目的的一种方法:

df[df.my_channel > 20000].my_channel = 0

如果我将通道复制到新的数据框中,这很简单:

df2 = df.my_channel 

df2[df2 > 20000] = 0

这正是我想要的,但似乎不能将通道作为原始 DataFrame 的一部分来使用。


解决方案 1:

.ixindexer 在 pandas 0.20.0 之前的版本中工作正常,但从 pandas 0.20.0 开始,.ixindexer 已被弃用,因此您应该避免使用它。相反,您可以使用.lociloc索引器。您可以通过以下方式解决此问题:

mask = df.my_channel > 20000
column_name = 'my_channel'
df.loc[mask, column_name] = 0

或者,用一行代码来表示,

df.loc[df.my_channel > 20000, 'my_channel'] = 0

mask帮助您选择其中的行df.my_channel > 20000True同时df.loc[mask, column_name] = 0将值 0 设置为mask名称为 的列中选定的行column_name

更新:
在这种情况下,您应该使用,loc因为如果您使用iloc,您将得到一个NotImplementedError告诉您基于 iLocation 的整数类型的布尔索引不可用

解决方案 2:

尝试

df.loc[df.my_channel > 20000, 'my_channel'] = 0

注意: 从 v0.20.0 开始,ix已弃用而使用loc/ iloc

解决方案 3:

np.where函数工作原理如下:

df['X'] = np.where(df['Y']>=50, 'yes', 'no')

对于你的情况,你可能想要:

import numpy as np
df['my_channel'] = np.where(df.my_channel > 20000, 0, df.my_channel)

解决方案 4:

原始数据框未更新的原因是链式索引可能会导致您修改数据框的副本而不是视图。文档给出了以下建议:

在 pandas 对象中设置值时,必须小心避免所谓的链式索引。

您有几种选择:-

loc+ 布尔索引

loc可用于设置值并支持布尔掩码:

df.loc[df['my_channel'] > 20000, 'my_channel'] = 0

mask+ 布尔索引

您可以为您的系列分配:

df['my_channel'] = df['my_channel'].mask(df['my_channel'] > 20000, 0)

或者您可以就地更新您的系列:

df['my_channel'].mask(df['my_channel'] > 20000, 0, inplace=True)

np.where+ 布尔索引

当您的条件不满足时,您可以通过分配原始系列来使用 NumPy ;但是,前两个解决方案更清晰,因为它们仅明确更改指定的值。

df['my_channel'] = np.where(df['my_channel'] > 20000, 0, df['my_channel'])

解决方案 5:

尝试一下:

df.my_channel = df.my_channel.where(df.my_channel <= 20000, other= 0)

或者

df.my_channel = df.my_channel.mask(df.my_channel > 20000, other= 0)

解决方案 6:

我会像这样lambda在 a 上使用函数:Series`DataFrame`

f = lambda x: 0 if x>100 else 1
df['my_column'] = df['my_column'].map(f)

我不敢肯定这是一种有效的方法,但是它确实有效。

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1048  
  在产品开发领域,如何提升产品交付质量一直是企业关注的焦点。集成产品开发(IPD)作为一种系统化的产品开发方法,通过跨职能团队的协同、流程的优化以及资源的整合,能够有效提升产品的交付质量。IPD培训作为推动这一方法落地的重要工具,不仅能够帮助团队理解IPD的核心原则,还能通过实践和案例学习,提升团队的执行力和协作效率。本...
IPD研发管理体系   0  
  在现代企业中,跨部门合作已成为项目成功的关键因素之一。随着业务复杂性的增加,单一部门难以独立完成复杂的项目任务,因此需要多个部门的协同努力。然而,跨部门合作往往面临沟通不畅、职责不清、资源冲突等挑战,这些问题如果得不到有效解决,将直接影响项目的进度和质量。在这种背景下,IPD(集成产品开发)项目流程图作为一种系统化的管...
华为IPD流程   0  
  在研发IPD(集成产品开发)流程中,跨部门协作是确保项目成功的关键因素之一。IPD流程强调从概念到市场的全生命周期管理,涉及市场、研发、制造、供应链等多个部门的协同工作。然而,由于各部门的目标、工作方式和优先级不同,跨部门协作往往面临沟通不畅、资源冲突、决策延迟等挑战。为了应对这些挑战,企业需要采取系统化的方法,优化跨...
IPD概念阶段   0  
  在项目管理的生命周期中,CDCP(Concept Development and Control Plan)阶段是项目从概念到实施的关键过渡期。这一阶段不仅需要明确项目的目标和范围,还需要确保项目团队能够灵活应对可能出现的变更和调整。变更管理在这一阶段尤为重要,因为任何未经控制的变更都可能对项目的进度、成本和质量产生深...
IPD流程中TR   0  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用