我有以下pandas dataframe df
:
index A B C
1 1 2 3
2 9 5 4
3 7 12 8
... ... ... ...
我希望每行的最大值保持不变,所有其他值变为 -1
. 因此输出看起来像这样:
index A B C
1 -1 -1 3
2 9 -1 -1
3 -1 12 -1
... ... ... ...
通过使用 df.max(axis = 1)
,我得到一个pandas Series
,其中每行的最大值 . 但是,我正在寻找一个矢量化,快速实现 .
3 回答
考虑使用where:
这里
df.eq(df.max(1), 0)
是一个标记行最大值的布尔DataFrame;真值(最大值)保持不变,而假值变为-1 . 如果您愿意,也可以使用Series或其他DataFrame而不是标量 .该操作也可以在现场完成(通过
inplace=True
) .您可以通过eq与max按行比较来创建布尔
mask
,然后应用反向mask
:全部一起:
为每个值创建一个大小相同的
df
的新数据框 . 然后使用enumerate
获取给定行中的第一个最大值,使用标量的整数获取/设置(iat
) .Timings