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

Python 在数据帧中平方值时保留符号,python,pandas,Python,Pandas,我试过这个: >>> (-10) ** 2 100 >>> -10 ** 2 -100 简而言之,我试图将负值的输出平方为负值。 因此,我尝试了上述简单的表达方式。 然后我在Pandas数据帧上尝试了相同的公式,但是我得到了所有的正值 >>> listi = [-10,-2,2,3,4,5,-100,-3,4] >>> import pandas as pd >>> df = pd.DataFrame(l

我试过这个:

>>> (-10) ** 2
100
>>> -10 ** 2
-100
简而言之,我试图将负值的输出平方为负值。
因此,我尝试了上述简单的表达方式。
然后我在Pandas数据帧上尝试了相同的公式,但是我得到了所有的正值

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

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

对于负值,您可以使用for
-1
将值乘以:

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

之所以这样做是因为
df
是一个变量,如果您使用变量尝试第一个代码:

>>> a=-10
>>> a**2
100
>>> 
它也会给出一个正数,所以它实际上是关于操作顺序,
实际上是用一行代码代替两行代码
a=foo
然后是下一行
a**bar

一种方法(不推荐)是:

>>> df**2 * (df<0).astype(int).replace(0,-1)
       0
0   -100
1     -4
2      4
3      9
4     16
5     25
6 -10000
7     -9
8     16

>>df**2*(df您的原始示例使用
-10
没有保留值的符号,它只是使
10**2
的结果为负值。这是因为

您可以使用

np.sign(df) * df**2

熊猫会将其视为
(-10)**2
,因此你必须先自己检测它是否为阴性

此处使用,如果值为负值,则此数据的倍数为-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
另一种新奇的方式

(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
(df>0)*df**2-(df<0)*df**2
出[545]:
0
0   -100
1     -4
2      4
3      9
4     16
5     25
6 -10000
7     -9
8     16

很难想象一元
-
的优先级低于
-10**2
中的
**
。但是对于这个问题,我认为
df**2
实际上就像
(.10)**2
祝贺你得到了你的3k男人:-)@U9前进-是的,另一个答案解释一下。是的,你是正确的。这里有两个答案,作为我的问题的答案。我希望我可以选择接受这两种答案:P@jezrael这是真的,希望大家都能读到这两个答案together@JafferWilsonLol:-)@JafferWilson也许对我来说也是+1:-),或者是ya:-)你的回答是解释,有助于理解我遇到的问题。我接受的答案解决了这个问题。正如我所说的,有时我们必须做出艰难的决定……:)很高兴你回答了我的问题,消除了我的困难。。。谢谢你回答我的问题,以后继续回答。。。这真的很有帮助……)很高兴有像你这样随时准备帮助和分享知识的人。我真的希望下次在一次调查中,我会补充说,允许提问者接受至少两个答案。。。。。有时候真的很难。但是我已经投了赞成票…:)…@JafferWilson谢谢你投赞成票:-)我很高兴你问我这些问题,这样我就可以帮助你:-)我总是投赞成票所有有用的问题和答案。。这是一个伟大的功能,所以给予。它鼓励提问者和回答问题的人。。我非常喜欢……)@JafferWilson我也这么做,我总是投票给好的内容,当我问的时候,我投票给大多数答案(如果他们不帮我,我很少不投,哈哈),我也因此喜欢:-)