熊猫将满足大于和小于条件的列的值乘以

时间:2019-11-21 16:10:39

标签: python pandas

如何使用pandas将满足条件的列的值乘以多?

df['res'] = ((df['value']<=3) & (df['value']>=1)) * 1.5 *df['value']

df['res'] = ((df['value']<=7) & (df['value']>=4)) * 1.3 *df['value']

以上是我尝试过的。但是,我一直收到消息:

  

试图在DataFrame的切片副本上设置一个值。尝试使用.loc [row_indexer,col_indexer] = value代替“

当我尝试具有两个以上条件时,“ res”变为0。

以下是我希望实现的目标:

value    res
2        3
6        7.8

3 个答案:

答案 0 :(得分:3)

您会混淆两种对象:掩码,它们是布尔序列,而数据框的原始列是具有数值的序列。
这应该可以解决问题:

mask1 = (df['value']<=3) & (df['value']>=1)
mask2 = (df['value']<=7) & (df['value']>=4)
df.loc[mask1, 'res'] = df['value'] * 1.5
df.loc[mask2, 'res'] = df['value'] * 1.3
print(df)
   value  res
0      2  3.0
2      6  7.8

答案 1 :(得分:2)

您可以使用以下方法获取范围:

df['res'] = df['value'].between(1, 3, inclusive=True)

在此包含在内,可确定是否应包括端点。

答案 2 :(得分:1)

我建议使用.between方法来创建这样的掩码,即:

    df.loc[df['value'].between(1,3), 'res'] = df[ df['value'].between(1,3), 'value'] * 1.5
    df.loc[df['value'].between(4,7), 'res'] = df[ df['value'].between(4,7), 'value'] * 1.3

或者,您也可以使用np.where函数,该函数充当if-else:

    df['res'] = np.where(df['value'].between(1,3), 
                         df['value'] * 1.5,
                         np.where(df['value'].between(4,7),
                                  df['value'] * 1.3,
                                  df['value']))