2017-04-20 77 views
1

我有一個包含布爾值(1和-1)和nans的熊貓數據框。我想用「高」,「低」和nans這些字填充它。我曾嘗試:熊貓:3狀態布爾索引與字符串替換

1)布爾索引

df[df==1] = 'High' 

但隨後得到了混合型錯誤,當我走到下一個條件,

2),並使用 '其中'

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

但這實際上給出了相反的結果(指定'高'到df <> 1)。

我應該怎麼做?

回答

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