使用pandas数据框中的多个行或列值进行计算

我对excel感到如此舒适的原因之一是我可以轻松地传递一系列值或数组,并在计算中使用一个或多个这些值。

例如说我有数组[1,2,1,5,7,10,6,20,12,7,4]

我可能想要计算:

  1. 连续的向上或向下序列的数量,例如1-2将是1,因为2大于1。

  2. 在5,7,10的情况下,我想把这个顺序计为2,(5到7)和(7到10)

  3. 我还想计算一下实际上对序列产生影响的范围或值,以及它们发生的位置,例如(6到10)只有1个连续向上,因为这个移动是14( 20-6)。 就序列发生的时间而言,我想logging数组索引位置,或者可能附加到另一列中的数字的date。

使用excel,我将这个数组传递给一个函数,并说如果元素(0)>元素(1)移动到元素2和3等等,然后当我logging的价值下降的负方向我sum那些价值。

或者如果我是以单元格的forms来做的话,我可以说如果(活动单元格的值)是负数,那么在使用.offset之前将两者相加。

不过,我不知道如何使用pandas来获得一个行或一列中的两个或更多的值,就像我使用偏移一样?

很多谢谢,乔希。

更新>>感谢您的更新,我会添加更多的细节

  1. 基本上每个产品都有一套价值,而且我有多个产品,产品在一列中,与产品相关联的是多个参考价格的数字。 此刻,我的桌子有如下的布局,但同一个产品可能会出现在多行,因为它在不同的date出售:

|product | price | | Product A | 1 | | Product B | 2 | | Product C | 1 | | Product D | 5 | | Product E | 7 | | Product F | 10 | | Product G | 6 | | Product H | 20 | | Product I | 12 | | Product H | 7 | | Product I | 4 | 
  1. 然后和第一点一样,我想计算从前一点开始的连续上升和下降序列的数量。 从1到2的前两个点是+1,如下所示:

    |产品| 价格| | 产品A | 0 | | 产品B | 1 | | 产品C | -1 | | 产品D | 4 | | 产品E | 2 | | 产品F | 3 | | 产品G | -4 | | 产品H | 14 | | 产品I | -8 | | 产品H | -4 | | 产品I | -3 |

  2. 那么我想把这些动作列出来,所以我可以总结一下,看一个特定产品移动的次数。

_

 |product | price | down -3 |down -2 |down -1 |up/down 0 |up 1 | | Product A | 1 | 0 | 0 | 0 | 0 | 0 | | Product B | 2 | 0 | 0 | 0 | 0 | 1 | | Product C | 1 | 0 | 0 | 1 | 0 | 0 | | Product D | 5 | 0 | 0 | 0 | 0 | 0 | | Product E | 7 | 0 | 0 | 0 | 0 | 0 | | Product F | 10 | 0 | 0 | 0 | 0 | 0 | | Product G | 6 | 0 | 0 | 0 | 0 | 0 | | Product H | 20 | 0 | 0 | 0 | 0 | 0 | | Product I | 12 | 0 | 0 | 0 | 0 | 0 | | Product H | 7 | 0 | 0 | 0 | 0 | 0 | | Product I | 4 | 1 | 0 | 0 | 0 | 0 | 

_

  1. 接下来,对于问题(2),想要统计连续的上升动作或下降动作的数量,并以与上述相同的格式进行显示。 连续2 | 在列等

  2. 接下来是问题(3),我希望看到值的范围,以及发生连续向上运动的date。 例如产品C,D和E(假设产品C,D和E的价格date分别为2014-01-01,2014-01-02和2014-01-03),这些产品在排,值是1,5,7。所以我想表示。

_

 |products |dates | values | |C, D, E | 2014-01-01 to 2014-01-03| 1, 5, 7 | 

综上所述

  • 我希望看到产品价格的变化(相同的产品可以在不同的日子以不同的价格出售)从一天到下一天。
  • 然后我想看一个产品移动1点的次数,相同产品移动20点的次数。 那么我可能会看到一个模式:产品价格不会经常变化,但是当产品价格跳涨时, 或者我可以通过总结价格的变化来看到,一个产品的价格交替最常下降3点,然后提高3点,因此是周期性的。
  • 最后,我想看看价格何时上涨3点(date)以及价格在何时发生的价值(1,5,7)。

在[1]中:s = pd.Series([1,2,1,5,7,10,6,20,12,7,4])

1:增加的数量

 In [3]: s.diff() > 0 Out[3]: 0 False 1 True 2 False 3 True 4 True 5 True 6 False 7 True 8 False 9 False 10 False dtype: bool In [4]: (s.diff() > 0).sum() Out[4]: 5 

2:减less的数量:

 In [5]: (s.diff() < 0).sum() Out[5]: 5 

3a:变化的大小:

 In [6]: s.diff() Out[6]: 0 NaN 1 1 2 -1 3 4 4 2 5 3 6 -4 7 14 8 -8 9 -5 10 -3 dtype: float64 

3a:更改位置:

这应该已经由DataFrame或Series上的索引完成了。

您应该发布您的示例系列的预期输出的具体示例。 如果你想做任何这些行明智的,你可能必须首先转置DataFrame。