Pandas:带字符串替换的 3 状态布尔索引

Pandas: 3 state boolean indexing with string replacement

我有一个 pandas 数据框,其中包含布尔值(1 和 -1)和 nans。我想用 "High"、"Low" 和 nans 来填充它。我试过:

1) 布尔索引

df[df==1] = 'High'

但是当我进入下一个条件时出现混合类型错误,

2) 并使用 'where'

df.where(df==1,'High')

但这实际上给出了相反的结果(将 'High' 分配给 df<>1)。

我应该怎么做?

使用replace or double numpy.where:

d = {1:'High', -1:'Low'}
df = df.replace(d)

另一个解决方案:

df = pd.DataFrame(np.where(df == 1, 'High',
                  np.where(df == -1, 'Low', np.nan)), index=df.index, columns=df.columns)
print (df)

样本:

df = pd.DataFrame({'A':[1,-1,np.nan],
                   'B':[np.nan,1,1],
                   'C':[1,-1,1]})

print (df)
     A    B  C
0  1.0  NaN  1
1 -1.0  1.0 -1
2  NaN  1.0  1

d = {1:'High', -1:'Low'}
df = df.replace(d)
print (df)
      A     B     C
0  High   NaN  High
1   Low  High   Low
2   NaN  High  High

df = pd.DataFrame(np.where(df == 1, 'High',
                  np.where(df == -1, 'Low', np.nan)), index=df.index, columns=df.columns)
print (df)
      A     B     C
0  High   nan  High
1   Low  High   Low
2   nan  High  High