在pandas数据帧中使用多个行或列值进行计算

时间:2014-03-26 11:24:26

标签: python excel vba 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)。就序列发生的时间而言,我想记录数组索引位置,或者可以附加到另一列中的数字的日期。

  4. 使用excel,我会将此数组传递给函数,并说出Element(0)> element(1)移动到元素2和3,依此类推,然后当我记录值向负方向下降时,我将这些值相加。

    或者,如果我按照单元格进行操作,我可以说如果(活动单元格值)为负数,则在使用.offset之前将两者相加。

    但是我不知道如何使用pandas从行或列中获取两个或更多值,就像我使用offset一样?!

    很多,谢谢,乔希。

    更新>>感谢大家的更新,我将添加更多细节

    1. 基本上每个产品都有一组值,我有多个产品,产品在一列中,与产品相关联的是多个数字,这些数字指的是价格。目前我的桌子有如下布局,但同一产品可能出现在多条线上,因为它在不同日期出售:
    2. '

      |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. 然后我想把这些动作放在列中,所以我可以求和,并查看特定产品移动的次数。

      3. _

        |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)我想计算连续向上移动或向下移动的次数,并以相同的上述格式呈现它们|连续1 |连续2 |在列等。

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

        3. _

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

          摘要

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

1 个答案:

答案 0 :(得分:1)

在[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:减少次数:

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。