Pandas:设置滑动窗口迭代行并应用函数

时间:2018-05-01 10:42:21

标签: python pandas

我在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 :(得分:1)

如果我理解正确,这应该有效:

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]