Невозможно отменить первую разницу в pandas кадре данных - PullRequest
1 голос
/ 21 июня 2020

У меня есть следующие данные

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, используя функцию diff () в pandas. Теперь я хочу изменить эту разницу, поэтому я использовал функцию 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

Ответы [ 2 ]

2 голосов
/ 21 июня 2020

У вас отсутствует начальное значение для cumsum.

Вы можете попробовать что-то вроде этого:

y = dataset['bidclose']

y_diff = y.diff(periods=1)

y_rev = y_diff.fillna(y[0]).cumsum()
2 голосов
/ 21 июня 2020

Думаю, вы на правильном пути! 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, чтобы добавить строку / значение в начало.

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
...