如何用列名填充数据框的真值?

时间:2017-08-29 10:56:39

标签: python pandas mask

我有一个具有True和False值的DataFrame。

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

我想用列名填充真值,用0填充假值。我怎么能这样做?

即将结果作为

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

1 个答案:

答案 0 :(得分:4)

首先将booelan替换为int,然后将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改进了新版本的pandas 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