gpt4 book ai didi

python - xarray.DataArray.diff 与 pandas.DataFrame.diff 输出不同

转载 作者:太空宇宙 更新时间:2023-11-03 19:49:38 27 4
gpt4 key购买 nike

随着 pandas 面板的弃用,我一直在尝试将一些高维数据从 pandas 迁移到 xarray。我想在xarray中使用diff函数,但它的参数和输出与pandas不一样。

pandas 版本:“DataFrame.diff(self, period=1, axis=0)”允许我设置要移动的周期数以计算差异。即周期=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 与 period=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

与 n=1 时的 DataArray 输出相同:

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() 代替。欢迎任何建议或解释。

最佳答案

da.diff 中的

n 是“值差异的次数”。

因此,如果n = 2,则它是 xarray 中的二阶差分。而 df.diff 始终是一阶。

关于python - xarray.DataArray.diff 与 pandas.DataFrame.diff 输出不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59922405/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com