【发布时间】:2018-11-05 07:11:34
【问题描述】:
我的原始数据框如下所示:
A B C
0.10 0.83 0.07
0.40 0.30 0.30
0.70 0.17 0.13
0.72 0.04 0.24
0.15 0.07 0.78
我希望每一行都被二值化:1 将分配给具有最高值的列,其余的将设置为 0,因此前一个数据帧将变为:
A B C
0 1 0
1 0 0
1 0 0
1 0 0
0 0 1
如何做到这一点?
谢谢。
编辑:我知道一个特定的案例使我的问题模棱两可。我应该说,如果给定行的 3 列相等,我仍然希望获得一个 [1 0 0] 向量,而不是该行的 [1 1 1]。
【问题讨论】:
-
你如何对待像
0.333, 0.333, 0.333这样的列? -
鉴于我在数据框中的浮点精度,我认为不会出现这样的问题。但如果发生这种情况,我不介意将“1”随机分配给三列之一,其余为 0。
-
如果你没有任何重复,你可以做
== max()(然后输入它/乘以1/随便)。如果确实有重复项,并且想随机选择一个而不是将它们都设置为 1,那就有点复杂了。 -
请注意,人们给您的几乎所有答案都是
== max()的变体。因为您暗示的唯一可能不是您想要的地方是在评论中。您确实需要将问题编辑为明确的。 -
@abarnert:我不确定你的意思?给出的解决方案真的很令人满意,解决了我的问题。您是在谈论编辑以添加如果一行的三列重复,我只希望一个等于 1 吗?
标签: python pandas conditional-statements