【问题标题】:Replacing specific ranges of values with NaNs of a DataFrame用 DataFrame 的 NaN 替换特定范围的值
【发布时间】:2020-02-22 06:14:29
【问题描述】:

我想根据特定列上的范围值条件,用 NaN 替换多个列的值范围。

即:假设我有[col1_min = 5, col1_max = 15][col2_min = 2, col2_max = 20],并且这些列看起来像这样:

df = pd.DataFrame({'col1':[1,50,15,10,4], 'col2':[12,10,100,11,56]})

col1   col2
1      12
50     10
15     100
10     11
4      56

期望的输出是:

df_filtered

col1   col2
nan    12
nan    10
15     nan
10     11
4      nan

我可以做的伪代码是 groupby 边界内的每一列使用 'df.groupby('col1' or 'col2')' 然后过滤每一列然后合并回原来的但我想保留内存成本降到最低。

有什么方法可以轻松做到这一点?

【问题讨论】:

    标签: python python-3.x pandas dataframe filter


    【解决方案1】:

    使用Series.where:

    df['col1']=df['col1'].where(df['col1'].between(5,15))
    df['col2']=df['col2'].where(df['col2'].between(2,20))
    

    【讨论】:

      【解决方案2】:

      我会做到的

      condition = {'col1':[5,15],'col2':[2,20]}
      pd.concat([df.loc[df[x].between(*y),x]for x, y  in condition.items()],axis=1)
      Out[313]: 
         col1  col2
      0   NaN  12.0
      1   NaN  10.0
      2  15.0   NaN
      3  10.0  11.0
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-11-14
        • 2013-09-12
        • 2022-10-15
        • 2022-11-29
        • 2017-07-04
        相关资源
        最近更新 更多