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

How to fill true values of a dataframe with column names?

我有一个包含 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

首先将 booelan 替换为 int 然后使用 mask or where 和反转掩码 ~:

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

感谢 对 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