如何使pandas / core / generic / pct_change在从负值变为正值时返回正值

时间:2016-05-21 12:26:12

标签: python pandas

ipdb> df["input"]
datetime
2011-01-01    2.577163
2011-01-02    0.579833
2011-01-03   -0.191187
2011-01-04    0.430754

ipdb> df["input"].pct_change()
datetime
2011-01-01         NaN
2011-01-02   -0.775011
2011-01-03   -1.329728
2011-01-04   -3.253050

我希望2011-01-04 -3.253050的值为3.253050。 pct_change()函数中是否有允许这样的选项?否则,这将是一种有效的方法吗?

基本上对于每个pct_change计算,如果前一个值<1,我想乘以-1。 0和当前值> 0.理想情况下,我想要一种不在python中使用for循环的方法,但现在就想到了这一点。

1 个答案:

答案 0 :(得分:1)

你可以写出你的条件,并在任何地方乘以-1:

>>> p = df["input"].pct_change()
>>> p
datetime
2011-01-01         NaN
2011-01-02   -0.775011
2011-01-03   -1.329728
2011-01-04   -3.253051
Name: input, dtype: float64
>>> p.loc[(df["input"].shift() < 0) & (df["input"] > 0)] *= -1
>>> p
datetime
2011-01-01         NaN
2011-01-02   -0.775011
2011-01-03   -1.329728
2011-01-04    3.253051
Name: input, dtype: float64