df中的列的值应限制为+100%
电流输出:
var1 var2 var3 var4
140% 475% 895% 16249%
337% -100% -100% -100%
173% -95% 5165% 454%
458% 18% 354% -100%
483% -73% 6962% -100%
147% 18% -100% -100%
期望输出
var1 var2 var3 var4
100% 100% 100% 100%
100% -100% -100% -100%
100% -95% 100% 100%
100% 18% 100% -100%
100% -73% 100% -100%
100% 18% -100% -100%
所以每列中高于100%的值都应该替换为100%,我不知道怎么做
EDIT:数据不是字符串,但以前看起来像这样:
先前输出:
var1 var2 var3 var4
1.40 4.75 8.95 162.49
3.37 -1.00 -1.00 -1.00
1.73 -0.95 51.65 4.54
4.58 0.18 3.54 -1.00
4.83 -0.73 69.62 -1.00
1.47 0.18 -1.00 -1.00
我在上面应用了这个:
df = df.style.format({'var1': '{:.0%}','var2': '{:.0%}', 'var3': '{:.0%}','var4': '{:.0%}'})
因为我需要以%为单位的数字作为最终输出
非常抱歉没有提供足够的信息,非常感谢您的帮助@user19077881
3条答案
按热度按时间hgtggwj01#
要将numpy clip应用于DataFrame df,并将%值作为字符串,可以用途:
df = df.应用Map(剪辑_it)
与
它给出了
fykwrbwg2#
如果你想把你的数据剪辑到
-100%, 100%
,你应该在样式化之前完成它。因为你的样式器基本上是乘以100并添加一个“%”字符,所以你的样式化数据中的-100%, 100%
剪辑等价于你的原始数据中的-1.0, 1.0
剪辑。然而,我想知道你是否真的需要像你的例子所建议的那样“裁剪”你的数据,或者你是否想相对于每列中的最大值和最小值来缩放它。如果你裁剪它,你会丢失162.49和4.54之间的差值,两者都变成了100%。通过缩放它,你可以在保持相对距离的同时将它保持在所需的范围内。
基于this answer,您可以
当然,由于这是基于每列的最大值和最小值进行缩放,因此在
-1.0, 1.0
上裁剪时,缩放后的数据的0不会与原始数据的0对应,例如在var4
列中,4.54变为-93%,因为它非常接近最小值。您可以修改前面的函数,以便在缩放时使用最大绝对值:cetgtptt3#
您可以使用
numpy.clip
来设置范围最小值或最大值以外的值,请考虑以下简单示例给出输出