2017-08-29 53 views
2

我有一個DataFrame True和False值。如何用列名填充數據框的真實值?

 
     A  B  C  D 
0 False True True False 
1 False False True False 
2 True True False False 

我想用列名稱和假值填充真值。我該怎麼做?

即要得到的結果

 
    A B C D 
0 0 B C 0 
1 0 0 C 0 
2 A B 0 0 

回答

3

首先更換booelanint然後~使用maskwhere與反向掩碼:

df = df.astype(int).mask(df, df.columns.to_series(), axis=1) 
print (df) 
    A B C D 
0 0 B C 0 
1 0 0 C 0 
2 A B 0 0 

df = df.astype(int).where(~df, df.columns.to_series(), axis=1) 
print (df) 
    A B C D 
0 0 B C 0 
1 0 0 C 0 
2 A B 0 0 

謝謝John Galt用於大熊貓0.21.x的新版本的改進:

df = df.astype(int).mask(df, df.columns, axis=1) 

numpy溶液:

a = np.tile(df.columns, [len(df.index),1]) 
print (a) 
[['A' 'B' 'C' 'D'] 
['A' 'B' 'C' 'D'] 
['A' 'B' 'C' 'D']] 

df = pd.DataFrame(np.where(df.astype(int), a, 0), columns=df.columns, index = df.index) 
print (df) 
    A B C D 
0 0 B C 0 
1 0 0 C 0 
2 A B 0 0 
+0

'df.astype(INT).mask(DF,df.columns,軸= 1)'應該做的我猜測? – Zero

+0

它返回給我'ValueError:其他必須是與自己相同的形狀作爲ndarray' – jezrael

+0

有趣的作品罰款'0.21.0' – Zero