无法反转 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()
我有以下数据
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()