如果 Pandas Dataframe 中的某行的 ID 值不是特定值,是否将其替换为 NaN?

Replace a row in Pandas Dataframe with NaN if an ID value in that row isn't a certain value?

我为这个可能令人困惑的标题道歉,但我会尽力解释我的情况。

假设我有一个假设的 Dataframe df,它有一个 id 列并且排列如下...

  time  id   x    y
  1.0    0   5    9 
  2.0    1   6    8
  3.0    2   7    7
  4.0    1   8    6

现在假设我只想要 df[id] = 1 行中的数据,但我没有删除其他行,而是像这样用 NaN 填充它...

  time  id   x    y
  1.0    0   NaN  NaN
  2.0    1   6    8
  3.0    2   NaN  NaN
  4.0    1   8    6

请注意,我特别想保留 timeid 列,只需更改x 和[=20 的值=] 到 NaN 对于没有 id 列设置为 1

的任何行

我的第一次尝试是使用 DataFrame.groupby(),但这会导致没有特定 id 值的任何行被完全删除,这是我不希望的。我的第一直觉是逐行进入 df,检查 id 列,如果 id != 1,则手动将值更改为 NaN,但这似乎非常麻烦 [=43] =] 这样做的方式。

有什么想法吗? 提前致谢!

您可以使用带有布尔掩码的简单选择:

df.loc[df['id'].ne(1), ['x', 'y']] = float('nan')

输出:

   time  id    x    y
0   1.0   0  NaN  NaN
1   2.0   1  6.0  8.0
2   3.0   2  NaN  NaN
3   4.0   1  8.0  6.0
from numpy import NAN
df.loc[df['id']!=1 , ['x','y']] = NAN