Восстановите индекс и добавьте нули после вычитания значений данных - PullRequest
0 голосов
/ 06 декабря 2018

Я рассчитываю разницу значений данных в разных лагах.Следующий фрейм данных - мой ввод

df = pd.DataFrame([[1, 2], [3, 4],[5,6],[7,8]], columns=list('AB'))

Чтобы вычислить разницу между последними тремя строками и первыми тремя строками, я делаю следующее.

df2=df.iloc[1:,:]

df3=df.iloc[:-1,:] 

df_out=pd.DataFrame(df2.values-df3.values,index=df2.index)

Вычисления, как и ожидалось, но я хочусохранить индекс 0 с нулями в этой строке.

df_expected_out=pd.DataFrame([[0,0], [2,2],[2,2],[2,2]], columns=list('AB'))

Пожалуйста, предложите путь вперед. Спасибо за ваше время.

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

Вы можете использовать функцию shift

(df - df.shift()).fillna(0)
Out[9]: 
     A    B
0  0.0  0.0
1  2.0  2.0
2  2.0  2.0
3  2.0  2.0
0 голосов
/ 06 декабря 2018

Я думаю, вам нужно reindex по исходному индексу:

df_out=pd.DataFrame(df2.values-df3.values,index=df2.index).reindex(df.index, fill_value=0)
print (df_out)
   0  1
0  0  0
1  2  2
2  2  2
3  2  2

Другое решение:

df_out= df.diff().fillna(0).astype(int)

Или добавить первую нулевую строку к массивам:

a1 = np.zeros((1, len(df.columns)), dtype=int)
arr = np.append(a1, df2.values, axis=0) - np.append(a1, df3.values, axis=0)
df_out = pd.DataFrame(arr, index=df.index)
print (df_out)
   0  1
0  0  0
1  2  2
2  2  2
3  2  2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...