xarray.DataArray.diff против pandas .DataFrame.diff вывод отличается - PullRequest
1 голос
/ 26 января 2020

Я пытался перенести некоторые из моих данных более высокого измерения из pandas в xarray с устаревшими панелями pandas. Я хотел бы использовать функцию diff в xarray, но ее параметры и выходные данные не совпадают с pandas.

Версия pandas: "DataFrame.diff (self, period = 1, axis = 0 ) »позволяет мне установить количество периодов, чтобы смещать для вычисления разницы. ie period = 2

Версия xarray "DataArray.diff (self, dim: Hashable, n: int = 1, label: Hashable = 'upper')" имеет только параметр n. Сколько раз значения различаются.

Импорт и пример DataFrame:

import numpy as np
import pandas as pd
import xarray as xr
​
data = np.random.randint(0, 9,(5,3))
date = pd.date_range('2000-01-01', periods=5)
cols = ['A','B','C']
​
df = pd.DataFrame(data, index=date, columns=cols)
​
print(df)
            A  B  C
2000-01-01  6  4  4
2000-01-02  1  1  5
2000-01-03  5  6  5
2000-01-04  5  8  4
2000-01-05  6  8  0

И соответствующий DataArray:

da = xr.DataArray(df, dims = ['date', 'col'])
​
print(da)
<xarray.DataArray (date: 5, col: 3)>
array([[6, 4, 4],
       [1, 1, 5],
       [5, 6, 5],
       [5, 8, 4],
       [6, 8, 0]])
Coordinates:
  * date     (date) datetime64[ns] 2000-01-01 2000-01-02 ... 2000-01-05
  * col      (col) object 'A' 'B' 'C'

Разница в DataFrame, как и ожидалось, и желательно выход с периодами = 1:

print(df.diff(periods=1))
​
              A    B    C
2000-01-01  NaN  NaN  NaN
2000-01-02 -5.0 -3.0  1.0
2000-01-03  4.0  5.0  0.0
2000-01-04  0.0  2.0 -1.0
2000-01-05  1.0  0.0 -4.0

Аналогичен выходу DataArray для n = 1:

print(da.diff('date', n=1))
​
<xarray.DataArray (date: 4, col: 3)>
array([[-5, -3,  1],
       [ 4,  5,  0],
       [ 0,  2, -1],
       [ 1,  0, -4]])
Coordinates:
  * date     (date) datetime64[ns] 2000-01-02 2000-01-03 2000-01-04 2000-01-05
  * col      (col) object 'A' 'B' 'C'

Но отличается, если периоды или n> 1:

print(df.diff(periods=2))
​
              A    B    C
2000-01-01  NaN  NaN  NaN
2000-01-02  NaN  NaN  NaN
2000-01-03 -1.0  2.0  1.0
2000-01-04  4.0  7.0 -1.0
2000-01-05  1.0  2.0 -5.0

против

print(da.diff('date',n=2))
​
<xarray.DataArray (date: 3, col: 3)>
array([[ 9,  8, -1],
       [-4, -3, -1],
       [ 1, -2, -3]])
Coordinates:
  * date     (date) datetime64[ns] 2000-01-03 2000-01-04 2000-01-05
  * col      (col) object 'A' 'B' 'C'

Я могу сделать обходной обход, чтобы получить желаемый результат и тот же ответ, что и DataFrame.diff:

print (da - da.shift(date=2))
​
<xarray.DataArray (date: 5, col: 3)>
array([[nan, nan, nan],
       [nan, nan, nan],
       [-1.,  2.,  1.],
       [ 4.,  7., -1.],
       [ 1.,  2., -5.]])
Coordinates:
  * date     (date) datetime64[ns] 2000-01-01 2000-01-02 ... 2000-01-05
  * col      (col) object 'A' 'B' 'C'

Но я хочу использовать вместо этого xarray.diff (), если это возможно. Любые советы или объяснения приветствуются.

1 Ответ

0 голосов
/ 16 февраля 2020

n в da.diff - это «Количество различий значений».

Так что если n = 2, это разница второго порядка в xarray. в то время как df.diff всегда первый заказ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...