我想用Pandas数据框来得到一个奇怪但又想要的输出数据框。对于每一行,我想用一个空字符串('')替换任何值0.0,用索引值替换所有值1.0。一行上的任何给定值只能是1.0或0.0。
以下是一些示例数据:
# starting df
df = pd.DataFrame.from_dict({'A':[1.0,0.0,0.0],'B':[1.0,1.0,0.0],'C':[0.0,1.0,1.0]})
df.index=['x','y','z']
print(df)
输入df看起来像什么:
A B C
x 1.0 1.0 0.0
y 0.0 1.0 1.0
z 0.0 0.0 1.0
我希望输出df看起来像什么:
A B C
x x x
y y y
z z
到目前为止,我已经得到了这段效率很低但看起来可以工作的代码:
for idx in df.index:
df.loc[idx] = df.loc[idx].map(str).replace('1.0',str(idx))
df.loc[idx] = df.loc[idx].map(str).replace('0.0','')
有谁能建议一个有效的方法来完成这个任务吗?我将使用的实际数据框的形状是(4548,2044),如果这有帮助的话。而且,每次我需要运行这段代码时,列标题和索引值都会不同。
谢谢!
3条答案
按热度按时间2ledvvac1#
使用
numpy.where
,将广播索引转换为numpy数组:性能(数据大小
(4548,2044)
):368yc8dk2#
您可以简单地执行以下操作:
其给出:
3b6akqbq3#
利用
1*'x' -> 'x'
和0*'x' -> ''
的以下特性:eq(1)
将浮点数转换为布尔值,因为True
等效于1
。如果只有0./1.
,也可以使用astype(int)
。*输出: