首页 > 解决方案 > 获取从第一个元素到最后一个元素的百分比变化

问题描述

我有这个数据集,我试图找到从每行元素到“9”列元素的百分比变化。

从功能上讲,我要做的是绘制股票价格全天的百分比变化,这样我就可以覆盖特定日期的平均百分比变化。

我试图调整熊猫的pct_change()功能,但这只是从每个元素到下一个元素的百分比变化,这是适得其反的。

这是数据框的示例。

任何帮助或见解将不胜感激。

Hour        9       10      11      12      13      14      15      16
Date                                
2016-01-05  20.6475 20.5900 20.4225 20.6275 20.1600 19.6500 19.6250 19.4100
2016-01-06  21.3550 20.8675 20.6100 20.6525 20.8900 21.0125 21.0600 20.5125
2016-01-07  23.0075 22.7975 23.0050 23.5975 24.4675 25.2450 25.1600 24.9575
2016-01-08  22.9125 23.2400 23.8575 23.9475 24.0425 24.4000 25.7950 26.7625
2016-01-11  25.7500 25.9100 25.8800 25.9325 26.7650 26.4025 24.9425 24.2725

标签: python-3.xpandasnumpyjupyter-notebook

解决方案


你不能pct_change在这里使用,你必须手动做:

>>> df.div(df.iloc[:, 0], axis=0).mul(100).sub(100)
Hour          9        10        11        12        13        14         15         16
Date
2016-01-05  0.0 -0.278484 -1.089720 -0.096864 -2.361061 -4.831093  -4.952173  -5.993462
2016-01-06  0.0 -2.282838 -3.488644 -3.289628 -2.177476 -1.603840  -1.381410  -3.945212
2016-01-07  0.0 -0.912746 -0.010866  2.564381  6.345757  9.725090   9.355645   8.475497
2016-01-08  0.0  1.429351  4.124386  4.517185  4.931806  6.492089  12.580469  16.803055
2016-01-11  0.0  0.621359  0.504854  0.708738  3.941748  2.533981  -3.135922  -5.737864

测试用例:

>>> df1 = pd.DataFrame({'A': [1, 2], 'B': [1.25, 2.25], 'C': [1.5, 1.5]})

>>> df.div(df.iloc[:, 0], axis=0).mul(100).sub(100)
     A     B     C
0  0.0  25.0  50.0
1  0.0  12.5 -25.0

推荐阅读