首页 > 解决方案 > 如何根据其他列中的条件将 pandas df 列中的多个值更改为 np.nan?

问题描述

我在编码方面没有太多经验,这是我的第一个问题,所以请耐心等待。我需要找到一种方法,根据另一列中的条件将 pandas df 列的多个值更改为 np.nan。因此,我创建了所需列“Vorgabe”和“Temp”的副本。

每当“Grad”中的值不是 0 时,我想将“Vorgabe”和“Temp”中定义区域中的值更改为 np.nan。

print(df)  

    OptOpTemp  OpTemp  BSP  Grad  Vorgabe  Temp
0        22.0    20.0    5   0.0     22.0  20.0
1        22.0    20.5    7   0.0     22.0  20.5
2        22.0    21.0    8   1.0     22.0  21.0
3        22.0    21.0    6   0.0     22.0  21.0
4        22.0    23.5    7   0.0     22.0  20.0
5        23.0    21.5    1   0.0     23.0  21.5
6        24.0    22.5    3   1.0     24.0  22.5
7        24.0    23.0    4   0.0     24.0  23.0
8        24.0    25.5    9   0.0     24.0  25.5

所以我想实现这样的目标:

    OptOpTemp  OpTemp  BSP  Grad  Vorgabe  Temp
0        22.0    20.0    5   0.0     22.0  20.0
1        22.0    20.5    7   0.0     nan   nan      <-one row above
2        22.0    21.0    8   1.0     nan   nan
3        22.0    21.0    6   0.0     nan   nan      <-one row among
4        22.0    23.5    7   0.0     22.0  20.0
5        23.0    21.5    1   0.0     nan   nan
6        24.0    22.5    3   1.0     nan   nan
7        24.0    23.0    4   0.0     nan   nan
8        24.0    25.5    9   0.0     24.0  25.5

有人可以解决我的问题吗?

编辑:我可能不清楚。目标是将定义区域中“Vorgabe”和“Temp”中的每个值更改为 nan。在我的示例中,该区域将是上面的一行,其中包含 1.0 的行,以及中间的一行。因此,不仅是 1.0 所在的行,而且还有上下行。

标签: pythonpandasdataframe

解决方案


使用loc

df.loc[df.Grad != 0.0, ['Vorgabe', 'Temp']] = np.nan
print(df)

输出

   OptOpTemp  OpTemp  BSP  Grad  Vorgabe  Temp
0       22.0    20.0    5   0.0     22.0  20.0
1       22.0    20.5    7   0.0     22.0  20.5
2       22.0    21.0    8   1.0      NaN   NaN
3       22.0    21.0    6   0.0     22.0  21.0
4       22.0    23.5    7   0.0     22.0  20.0
5       23.0    21.5    1   0.0     23.0  21.5
6       24.0    22.5    3   1.0      NaN   NaN
7       24.0    23.0    4   0.0     24.0  23.0
8       24.0    25.5    9   0.0     24.0  25.5

推荐阅读