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

时间:2017-04-20 19:56:23

标签: string pandas dataframe boolean where

我有一个包含布尔值(1和-1)和nans的pandas数据帧。我想用#34; High"," Low"和nans这些词来填充它。我试过了:

1)布尔索引

df[df==1] = 'High'

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

2)并使用'其中'

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

但这实际上会产生相反的结果(指定'高'到df<> 1)。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

使用replace或加倍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