如何从熊猫数据框中的当前行中减去前一行并将其应用于每一行;不使用循环?

Posted

技术标签:

【中文标题】如何从熊猫数据框中的当前行中减去前一行并将其应用于每一行;不使用循环?【英文标题】:How do I subtract the previous row from the current row in a pandas dataframe and apply it to every row; without using a loop? 【发布时间】:2017-01-21 15:19:55 【问题描述】:

我正在使用 Python3.5,并且正在使用 pandas。我已从 yahoo Finance 加载股票数据并将文件保存到 csv。我的 DataFrames 从 csv 加载这些数据。这是我的 DataFrame 的 csv 文件的十行的副本

  Date       Open       High      Low     Close    Volume   Adj Close  
1990-04-12  26.875000  26.875000  26.625  26.625      6100  250.576036
1990-04-16  26.500000  26.750000  26.375  26.750       500  251.752449
1990-04-17  26.750000  26.875000  26.750  26.875      2300  252.928863
1990-04-18  26.875000  26.875000  26.500  26.625      3500  250.576036
1990-04-19  26.500000  26.750000  26.500  26.750       700  251.752449
1990-04-20  26.750000  26.875000  26.750  26.875      2100  252.928863
1990-04-23  26.875000  26.875000  26.750  26.875       700  252.928863
1990-04-24  27.000000  27.000000  26.000  26.000      2400  244.693970
1990-04-25  25.250000  25.250000  24.875  25.125      9300  236.459076
1990-04-26  25.000000  25.250000  24.750  25.000      1200  235.282663

我知道我可以使用 iloc、loc、ix,但是我索引的这些值只会给出我的特定行和列,并且不会对每一行执行操作。 例如:打开列中的数据的第一行的值为 26.875,其下一行的值为 26.50。价格下跌 0.375 美分。我希望能够捕获前一天增加或减少的百分比,因此完成这个示例 0.375 除以 26.875 = 从一天到下一天减少 1.4%。我希望能够在每一行上运行这个计算,这样我就知道它比前一天增加或减少了多少。我尝试过的索引函数,但它们是绝对的,我不想使用循环。有没有办法用 ix、iloc、loc 或其他函数来做到这一点?

【问题讨论】:

df.Close.pct_change() 呢? 是的,班次应该可以工作我刚刚查了一下谢谢我一直在寻找类似的东西我也会尝试 close.pct 你们回答了我的问题谢谢 也许我误解了你的问题,但如果你只想应用到特定列,你能不能不做df.iloc[1:, :] - df.iloc[:-1, :] 在那里你可以为你的列名/索引调整它? 我认为这不适用于每一行? 【参考方案1】:

您可以使用pct_change() 或/和diff() 方法

演示:

In [138]: df.Close.pct_change() * 100
Out[138]:
0         NaN
1    0.469484
2    0.467290
3   -0.930233
4    0.469484
5    0.467290
6    0.000000
7   -3.255814
8   -3.365385
9   -0.497512
Name: Close, dtype: float64

In [139]: df.Close.diff()
Out[139]:
0      NaN
1    0.125
2    0.125
3   -0.250
4    0.125
5    0.125
6    0.000
7   -0.875
8   -0.875
9   -0.125
Name: Close, dtype: float64

【讨论】:

【参考方案2】:

MaxU 解决方案适合您的情况。如果您想根据之前的行执行更复杂的计算,您应该使用shift

【讨论】:

请不要写仅链接的答案 在这种情况下,这仅用作“答案”链接。这是一个带有相邻信息的旁白答案。

以上是关于如何从熊猫数据框中的当前行中减去前一行并将其应用于每一行;不使用循环?的主要内容,如果未能解决你的问题,请参考以下文章

如何一次将函数应用于熊猫数据框中的多个列

如何从一个数据框中获取规则并将其应用于其他数据框以获取 python 中的统计信息?

熊猫从数据框中的一列中提取部分字符串并将其存储在一个新列中

使用其他行中的值将函数应用于熊猫数据框行

如何从 imdb 获取更多信息并将其保存在 pandas 数据框中? [复制]

如何使用正则表达式从熊猫数据框中的一行中的字符串中提取所有特定值?