如何用列名填充数据框的真实值?
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
我有一个包含 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
感谢 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