【问题标题】:Pandas Dataframe - replace value with boolean maskPandas Dataframe - 用布尔掩码替换值
【发布时间】:2021-08-03 16:26:07
【问题描述】:

我有一个数据框,其中有一列名为“温度”

data = {'Day':  [1,2,3,4],
        'Temperature': [20,30,40,50]
        }

现在,我不想要温度数字,而是将“1”分配给温度在 25 到 45 范围内的单元格。如果不是,我将分配 0 给它。

我想要的数据框是

    data = {'Day':  [1,2,3,4],
        'Temperature': [0,1,1,0]
        }

我有一个如下的布尔掩码:

df[(df['Temperature']<=45) & (df['Temperature']>=25)]

如何使用布尔掩码来实现这一点?或者,最好的方法是什么?

谢谢。

【问题讨论】:

    标签: python pandas dataframe boolean data-manipulation


    【解决方案1】:

    想法是通过转换为整数将布尔掩码转换为0,1

    df = pd.DataFrame(data)
    
    df['Temperature'] = ((df['Temperature']<=45) & (df['Temperature']>=25)).astype(int)
    
    df['Temperature'] = np.where(df['Temperature']<=45) & (df['Temperature']>=25), 1, 0)
    

    Series.between类似的解决方案:

    df['Temperature'] = df['Temperature'].between(25, 45).astype(int)
    
    df['Temperature'] = np.where(df['Temperature'].between(25, 45), 1, 0)
    

    【讨论】:

      【解决方案2】:
      data = {'Day':  [1,2,3,4],
              'Temperature': [20,30,40,50]
              }
      
      df = pd.DataFrame(data)
      df[(df['Temperature']<=45) & (df['Temperature']>=25)] = 1
      df[(df['Temperature']>=45) & (df['Temperature']>=25)] = 0
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-08-11
        • 2018-04-10
        • 1970-01-01
        • 2015-11-03
        • 2013-05-17
        • 2021-10-11
        • 2019-08-15
        相关资源
        最近更新 更多