无法反转 pandas 数据帧中的第一个差异

Unable to reverse the first difference in pandas dataframe

我有以下数据

bidopen,bidclose,bidhigh,bidlow,askopen,askclose,askhigh,asklow,tickqty
1.3384,1.33855,1.3387,1.33838,1.33861,1.33878,1.33893,1.33861,694
1.33855,1.33842,1.33865,1.33827,1.33878,1.33865,1.33888,1.33849,814
1.33842,1.33876,1.33883,1.33834,1.33865,1.33897,1.33897,1.33854,459
1.33876,1.33891,1.33899,1.33865,1.33897,1.33914,1.3392,1.33887,626
1.33891,1.33901,1.33918,1.33869,1.33914,1.33922,1.3394,1.33889,771
1.33901,1.33896,1.33907,1.3389,1.33922,1.33916,1.33928,1.3391,451
1.33896,1.33878,1.33906,1.33877,1.33916,1.33902,1.33928,1.33898,552
1.33878,1.3388,1.33889,1.33869,1.33902,1.33902,1.33911,1.33891,421

我将数据拆分为 X 和 Y 变量。我使用 X 和 Y 变量的第一个差异 pandas 中的 diff() 函数。现在我想扭转这种差异,所以我使用了 cumsum() 函数 在 pandas。但它并没有将数据恢复到原来的形式。它给了我同样的价值观 由 diff() 函数给出。问题如何在使用 diff() 函数后将数据反转回来

import pandas as pd

dataset = pd.read_csv('/home/mahmoud/Desktop/qdata.csv')

y = dataset['bidclose']
x = dataset.iloc[:, 2:9]

y_diff = y.diff(periods=1)
y_diff = y_diff.dropna()
x_diff = x.diff(periods=1)
x_diff = x_diff.dropna()

y_rev = y_diff.cumsum()
x_rev = x_diff.cumsum()

当我使用 cumsum() 函数时,我希望这是返回的数据:

bidclose
0   1.33855
1   1.33842
2   1.33876
3   1.33891
4   1.33901
5   1.33896
6   1.33877
7   1.33880

我认为您的方向是正确的! cumsum 值将自 index 0 处的初始值以来值的周期与周期变化相加,即每增加一行 diff 的总和。您只需将初始值添加到 cumsum 值即可恢复数据集的原始形式。

y_rev = y_diff.cumsum() + df['bidclose'][0]
x_rev = x_diff.cumsum().add(df.iloc[0, 2:9])

请记住,您在 index 0 删除了行,要将其添加回来,您可以使用 pd.concat 添加 row/value开头。

y_rev = pd.concat([pd.Series(df['bidclose'][0]), y_rev])
x_rev = pd.concat([df.iloc[0:1, 2:9], x_rev])

输出:

# y_rev
0    1.33855
1    1.33842
2    1.33876
3    1.33891
4    1.33901
5    1.33896
6    1.33878
7    1.33880
dtype: float64

# x_rev
    bidhigh bidlow  askopen askclose    askhigh asklow  tickqty
0   1.33870 1.33838 1.33861 1.33878 1.33893 1.33861 694.0
1   1.33865 1.33827 1.33878 1.33865 1.33888 1.33849 814.0
2   1.33883 1.33834 1.33865 1.33897 1.33897 1.33854 459.0
3   1.33899 1.33865 1.33897 1.33914 1.33920 1.33887 626.0
4   1.33918 1.33869 1.33914 1.33922 1.33940 1.33889 771.0
5   1.33907 1.33890 1.33922 1.33916 1.33928 1.33910 451.0
6   1.33906 1.33877 1.33916 1.33902 1.33928 1.33898 552.0
7   1.33889 1.33869 1.33902 1.33902 1.33911 1.33891 421.0

您缺少 cumsum 的初始值。

您可以尝试这样的操作:

y = dataset['bidclose']

y_diff = y.diff(periods=1)

y_rev = y_diff.fillna(y[0]).cumsum()