Панды: установить скользящее окно, чтобы перебирать строки и применять функцию - PullRequest
0 голосов
/ 01 мая 2018

У меня есть следующее DataFrame в pandas:

[A]             [measure]
17442.77000     32.792658
17442.8         name1
17442.95100     32.792658
--
--
17517.49200     37.648482
17517.5         name2
17518.29600     37.648482
--
--
17565.77600     38.287118
17565.8         name3
17565.88800     38.287118
--
--
17596.93700     41.203340
17597.2         name4
17597.29700     41.203340
--
--
17602.16400     41.477979
17602.5         name5
17602.83900     41.612774
--
--
17618.16400     42.479890
17618.4         name6
17618.71100     42.681591

Я бы хотел перебрать каждые три строки и применить функцию, которая:

f(x)= df.iloc[0,1]+(df.iloc[2,1]-df.loc[0,1])*((df.iloc[1,0]-df.iloc[0,0])/(df.iloc[2,0]-df.iloc[0,0])).

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

Results={"name1": f(x), "name2": f(x),...}

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

1 Ответ

0 голосов
/ 01 мая 2018

Если я вас правильно понял, это должно сработать:

def f(x):
    return df.iloc[0,1]+(df.iloc[2,1]-df.iloc[0,1])*((df.iloc[1,0]-df.iloc[0,0])/(df.iloc[2,0]-df.iloc[0,0]))

Здесь вы применяете прокатку с window=3 и min_periods=1 с шагом 3, используя [[::3]]

a = df.rolling(window=3, min_periods=1).apply(f)[::3].reset_index(drop=True)

После сохранения строк столбца measurement в список s

s = list(i for i in df['measure'] if isinstance(i, basestring))

И назначить s в качестве ключа словаря d

d = a.T.to_dict('list')
for index, k in enumerate(list(s)):
    d[k] = d[index]
    del d[index]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...