diff()的熊猫反转

Ane*_*esh 5 python arrays numpy python-3.x

我已经改变了值,但是我无法使用diffinv()来区别它

    ds_sqrt=np.sqrt(ds)
    ds_sqrt=pd.DataFrame(ds_sqrt)
    ds_diff=ds_sqrt.diff().values
Run Code Online (Sandbox Code Playgroud)

谁能说出如何与众不同?

jpp*_*jpp 6

您可以通过进行操作numpy。算法由@Divakar提供

当然,您需要知道系列中的第一项才能起作用。

df = pd.DataFrame({'A': np.random.randint(0, 10, 10)})
df['B'] = df['A'].diff()

x, x_diff = df['A'].iloc[0], df['B'].iloc[1:]
df['C'] = np.r_[x, x_diff].cumsum().astype(int)

#    A    B  C
# 0  8  NaN  8
# 1  5 -3.0  5
# 2  4 -1.0  4
# 3  3 -1.0  3
# 4  9  6.0  9
# 5  7 -2.0  7
# 6  4 -3.0  4
# 7  0 -4.0  0
# 8  8  8.0  8
# 9  1 -7.0  1
Run Code Online (Sandbox Code Playgroud)


小智 6

您可以使用 pmdarima 中的 diff_inv。文档链接

# genarating random table
  np.random.seed(10)
  vals = np.random.randint(1, 10, 6)
  df_t = pd.DataFrame({"a":vals})

  #creating two columns with diff 1 and diff 2
  df_t['dif_1'] = df_t.a.diff(1)
  df_t['dif_2'] = df_t.a.diff(2)

  df_t

    a   dif_1   dif_2
  0 5   NaN     NaN
  1 1   -4.0    NaN
  2 2   1.0    -3.0
  3 1   -1.0    0.0
  4 2   1.0     0.0
  5 9   7.0     8.0
Run Code Online (Sandbox Code Playgroud)

然后创建一个函数,该函数将返回一个具有 diff 倒数值的数组。

from pmdarima.utils import diff_inv

def inv_diff (df_orig_column,df_diff_column, periods):
    # Generate np.array for the diff_inv function - it includes first n values(n = 
    # periods) of original data & further diff values of given periods
    value = np.array(df_orig_column[:periods].tolist()+df_diff_column[periods:].tolist())

    # Generate np.array with inverse diff
    inv_diff_vals = diff_inv(value, periods,1 )[periods:]
    return inv_diff_vals
Run Code Online (Sandbox Code Playgroud)

使用示例:

# df_orig_column - column with original values
# df_diff_column - column with differentiated values
# periods - preiods for pd.diff()
inv_diff(df_t.a, df_t.dif_2, 2) 
Run Code Online (Sandbox Code Playgroud)

输出:

array([5., 1., 2., 1., 2., 9.])
Run Code Online (Sandbox Code Playgroud)


V Z*_*V Z 5

Reverse diff in one line with pandas

import pandas as pd

df = pd.DataFrame([10, 15, 14, 18], columns = ['Age'])
df['Age_diff'] = df.Age.diff()

df['reverse_diff'] = df['Age'].shift(1) + df['Age_diff']

print(df)

    Age  Age_diff  reverse_diff
0   10       NaN           NaN
1   15       5.0          15.0
2   14      -1.0          14.0
3   18       4.0          18.0  
Run Code Online (Sandbox Code Playgroud)