在数据框中平方值时保留符号

时间:2019-05-06 06:27:14

标签: python pandas

我已经尝试过:

>>> (-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

我想知道为什么会这样吗?以及如何使用熊猫将负值的平方保持为负?

5 个答案:

答案 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)

您最初使用grd的示例未保留值的符号,只是使codetemplate的结果为负。这是因为** has higher precedence than -

您可以使用来保存标志

-10

答案 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