我已经尝试过:
>>> (-10) ** 2
100
>>> -10 ** 2
-100
简而言之,我试图将负值平方的输出作为负值。
所以我尝试了上面的简单表达式。
然后我在Pandas DataFrame上尝试了相同的公式,但是我收到了正数。
>>> listi = [-10,-2,2,3,4,5,-100,-3,4]
>>> import pandas as pd
>>> df = pd.DataFrame(listi)
>>> df
0
0 -10
1 -2
2 2
3 3
4 4
5 5
6 -100
7 -3
8 4
>>> df**2
0
0 100
1 4
2 4
3 9
4 16
5 25
6 10000
7 9
8 16
我想知道为什么会这样吗?以及如何使用熊猫将负值的平方保持为负?
答案 0 :(得分:3)
对于负值,您可以将-1
的值乘以numpy.sign
:
print (df**2 * np.sign(df))
0
0 -100
1 -4
2 4
3 9
4 16
5 25
6 -10000
7 -9
8 16
答案 1 :(得分:2)
答案 2 :(得分:1)
之所以这样做,是因为df
是一个变量,并且如果您尝试使用变量的第一个代码:
>>> a=-10
>>> a**2
100
>>>
这也会带来积极的影响,所以这实际上是关于操作顺序的问题,(
)
实际上是一个衬里替代了两个衬里a = foo
,然后是下一行{{ 1}}。
一种方法(不推荐)是:
a**bar
答案 3 :(得分:1)
熊猫会将其视为(-10) ** 2
,因此您必须先自己检查它是否为负值。
在此处使用df.where,如果该值为负,则此数据的倍数为-1。
df * df.where(df>0, -df)
输出:
0
0 -100
1 -4
2 4
3 9
4 16
5 25
6 -10000
7 -9
8 16
答案 4 :(得分:1)
另一种新颖的方式
(df > 0) * df ** 2 - (df < 0) * df ** 2
Out[545]:
0
0 -100
1 -4
2 4
3 9
4 16
5 25
6 -10000
7 -9
8 16