当前位置: 首页 > 知识库问答 >
问题:

对列执行条件操作

东郭阳德
2023-03-14

我知道这应该很简单,但是我想从熊猫数据框中取一列,并且只对满足某些条件(比如小于1)的条目乘以标量(比如2)。

例如,在这个数据框中,

df = pd.DataFrame(randn(5,4),index='A B C D E'.split(),columns='W X Y Z'.split())

          W         X       Y        Z  

A    2.706850 0.628133 0.907969 0.503826 
B    0.651118 -0.319318 -0.848077 0.605965 
C    -2.018168 0.740122 0.528813 -0.589001 
D    0.188695 -0.758872 -0.933237 0.955057 
E    0.190794 1.978757 2.605967 0.683509 

如果我有兴趣在列W上执行此操作,结果应该是

          W         X       Y        Z  

A    2.706850 0.628133 0.907969 0.503826 
B    1.302236 -0.319318 -0.848077 0.605965 
C    -4.036336 0.740122 0.528813 -0.589001 
D    0.37739 -0.758872 -0.933237 0.955057 
E    0.381588 1.978757 2.605967 0.683509

我有以下绝对任务:

df.loc[df['W'] < 1, 'W'] = 4

但是我不知道如何使用W中的实际值。

提前谢谢!

共有2个答案

戚勇
2023-03-14

您还可以使用numpy。其中

df['W'] = numpy.where(df['W'] < 1, df['W'] * 2, df['W'])

它会检查您的状况并应用相关操作。

澹台承载
2023-03-14

在您的情况下,只需使用*=运算符来使乘法就位:

如果原始数据帧看起来像:

>>> df
          W         X         Y         Z
0  2.706850  0.628133  0.907969  0.503826
1  0.651118 -0.319318 -0.848077  0.605965
2 -2.018168  0.740122  0.528813 -0.589001
3  0.188695 -0.758872 -0.933237  0.955057
4  0.190794  1.978757  2.605967  0.683509

您可以使用:

df.loc[df['W'] < 1, 'W'] *= 2

因此:

>>> df
          W         X         Y         Z
0  2.706850  0.628133  0.907969  0.503826
1  1.302236 -0.319318 -0.848077  0.605965
2 -4.036336  0.740122  0.528813 -0.589001
3  0.377390 -0.758872 -0.933237  0.955057
4  0.381588  1.978757  2.605967  0.683509

这相当于以下内容:

df.loc[df['W'] < 1, 'W'] = df.loc[df['W'] < 1, 'W'] * 2
 类似资料:
  • 我有一个很大的数据表,其中每一行都需要基于完整数据表的一部分进行计算。作为一个例子,考虑下面的数据表,并假设每一行的I都需要计算当前行的id2与id1匹配的每一行的num变量之和,以及当前行的时间变量在距离当前行的时间1的范围内。 这可以通过像这样循环每一行来轻松完成 生成的 data.table 如下所示: 什么是正确的/快速的方法来做这样的事情使用data.table?

  • 我有一个猫鼬模式 我最初设置了名称和电话字段的集合。我需要将集合更新为消息数组中的新消息和新地址到地址对象中。该函数还必须处理任何单个操作,即在某些情况下我只更新到消息数组或更新到名称和地址。所以我如何在单个函数中执行所有操作。

  • 为了写出更实用的程序,我们几乎总是需要检查特定条件,并相应地改变程序的行为。条件语句给了我们这种能力。最简单的形式是if语句: if( x > 0){ cout << "x is positive" <<endl; } 圆括号中的表达式被称为条件。如果条件为真,则花括号中的语句会被执行。否则不执行。 条件可以包括任何比较操作符: x == y //x等于y x !=

  • (我很抱歉我的例子过于简单,我将尝试解决这个问题,并以更方便的格式格式化我更相关的示例,以便直接复制到R中。特别是,有多个值列,以及前面一些不需要解析的其他信息的列。 我对R和data.table都不熟悉,所以我希望能就我发现的一个问题提供意见。我正在处理一个数据表,其中一列是冒号分隔的格式字符串,作为其他冒号分隔列中值的图例。为了解析它,我必须首先将其拆分为它的组件,然后搜索我需要稍后索引值字符

  • 我可以通过使用WatchKey注册cw来监视目录(网络上有很多例子),但是这个监视程序会捕捉到每一个事件。例如,在windows上,如果我监视d:/temp dir并创建一个新的。txt文件并将其重命名,我得到以下事件。 我想在创建或更新新文件时执行一个操作。但是,我不希望在上面的示例中该操作运行5次。 我的第一个想法:因为我只需要每隔一段时间运行一次操作(在这种情况下是推送到私有Git服务器)(