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

Posted

技术标签:

【中文标题】在 pandas 数据框中使用多个行或列值进行计算【英文标题】:using more than one row or column value in a pandas dataframe for a calculation 【发布时间】:2014-05-04 18:22:26 【问题描述】:

我对 excel 如此满意的原因之一是我可以轻松传递一系列值或数组,并在计算中使用其中一个或多个值。

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

我可能想计算:

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

    在 5、7、10 的情况下,我想将这个向上序列计数为 2、(5 到 7)和(7 到 10)

    我还想计算实际上对序列有贡献的范围或值,以及它们发生的位置,例如,即使 (6 到 10) 仅连续 1 次,它也很重要,因为事实上移动是 14 (20-6)。就序列发生的时间而言,我想记录数组索引位置,或者可以附加到另一列中的数字的日期。

使用 excel,我会将这个数组传递给一个函数,并说如果 Element(0) > element(1) 移动到元素 2 和 3 等等,然后当我记录该值下降到负方向我总结了这些值。

或者如果我是根据单元格来做的,我可以说如果(活动单元格值)为负,则使用 .offset 将两者相加。

但是我不确定如何使用 pandas 从行或列中获取两个或多个值,就像使用偏移量一样?!

非常感谢,乔希。

更新>>谢谢大家的更新,我会补充更多细节

    基本上每个产品都有一组值,我有多个产品,产品在一个列中,与产品相关联的是多个数字,它们指的是价格。目前我的表格布局如下所示,但同一产品可能会出现在多行,因为它在不同的日期销售:

'

|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 到 2 的前两个点将是 +1,如下所示:

    |产品 |价格 | |产品A | 0 | |产品B | 1 | |产品C | -1 | |产品 D | 4 | |产品 E | 2 | |产品 F | 3 | |产品 G | -4 | |产品 H | 14 | |产品一 | -8 | |产品 H | -4 | |产品一 | -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     |

_

    下一个问题(2)我想统计一排连续向上运动或向下运动的次数,并以与上述相同的格式呈现|连续1 |连续 2|在列等中。

    问题 (3) 的下一个我想查看值的范围,以及连续向上运动字符串发生的日期。例如产品 C、D 和 E(假设产品 C、D 和 E 的价格日期分别为 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 个点(日期),以及变动发生时价格的值是多少(1、5、7)。

【问题讨论】:

【参考方案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。

【讨论】:

或者,要在一个步骤中明确计算增加和减少,(s.diff() &gt; 0).value_counts() 嗯,看起来我有点误读了这个问题。我认为 OP 想要划分成各种大小的运行?其实现在我不确定。 令人困惑,是的。最后,我的解释和你一样。它取决于他要去哪里(“变化的位置”),这还不清楚。 伙计们,我只想能够传入一列值,并根据计算,然后添加这些值的子集。例如,如果一行中的三个值都高于前一个,而第四个较低,那么我想将前三个相加。那有意义吗。我想要优于 cell.offset 属性或数组元素提供的功能。我需要能够对数据框列中的多个值应用计算,而不是单个值。

以上是关于在 pandas 数据框中使用多个行或列值进行计算的主要内容,如果未能解决你的问题,请参考以下文章

Pandas学习笔记,选择多个行或列

计算由另一列值分组的列值在 pandas 数据框中的共现

pandas DataFrame行或列的删除方法

如何将多个列值连接到 Pandas 数据框中的单个列中

Pandas:交换一个数据框中的特定列值并计算其加权平均值

【pandas笔记】删除DataFrame中特定所在的行或列