iterrows (): дает одинаковый результат для каждой строки - PullRequest
0 голосов
/ 10 декабря 2018

Я пытаюсь создать автоковариацию для нескольких лагов в нескольких рядах.В этом примере я получил две строки и 11 лагов.

В моем примере я получил следующие две строки:

enter image description here

в тексте:

 array([[164, 148, 152, 144, 155, 125, 153, 146, 138, 190, 192, 192],
   [239, 379, 105, 150, 400, 326, 134, 441, 199, 431, 203, 425]], dtype=int64)

Я хочу получить автоковариацию для каждой строки с лагом 0,1 ... 11.

На данный момент я получил следующий код:

 import statsmodels as sm
 import numpy as np
 import pandas as pd
 df = pd.read_excel("directory\\file.xlsx")

def autocov(row):
    x = sm.tsa.stattools.acovf(df.T[row], unbiased=False, demean=True, 
    fft=None, missing='none')
    autocov_df = pd.DataFrame(x)

for index,row in df.iterrows():
     print(x)

Это печатает мне следующий массив:

output

в тексте:

 [ 447.52083333  191.93229167   94.51041667  -26.36979167  -87.58333333
   -97.90104167 -121.86458333  -54.328125    -94.47916667  -31.19270833
   -12.65625      16.171875  ]
 [ 447.52083333  191.93229167   94.51041667  -26.36979167  -87.58333333
   -97.90104167 -121.86458333  -54.328125    -94.47916667  -31.19270833
  -12.65625      16.171875  ]

Однако, как вы можете видеть,он печатает одинаковые значения для обеих 2 строк.

Что я делаю неправильно в своем коде ???

Это мой предпочтительный вывод:

[ 447.52083333  191.93229167   94.51041667  -26.36979167  -87.58333333
  -97.90104167 -121.86458333  -54.328125    -94.47916667  -31.19270833
  -12.65625      16.171875  ]
[ 14887., -7237., 1811.,-198.5,
  2903.08333333,  -3346.41666667,   1140.33333333,  -1207.25      ,
  1141.08333333,  -3307.75      ,   1402.33333333,   -544.41666667]

1 Ответ

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

Вы выполняете итерацию с index, row, но вы печатаете постоянное значение:

for index,row in df.iterrows():
    print(autocov_df.T)

autocov_df.T не зависит от index или row.

Вам необходимо использоватьпеременная итерации, чтобы увидеть разницу, например:

for index,row in df.iterrows():
    y = some_function(index,row)
    print(y)

В вашем примере вы не вызываете autocov, и в этой функции нет оператора возврата:

def autocov(row):
    x = sm.tsa.stattools.acovf(df.T[row], unbiased=False, demean=True, 
    fft=None, missing='none')
    autocov_df = pd.DataFrame(x)
    return(autocov_df)

for index,row in df.iterrows():
     x = autocov(index)
     print(x)

Обратите внимание, что вашименование параметров может вводить в заблуждение.

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