我在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),...}
非常感谢任何有关如何在熊猫中设置滑动窗口的提示。
答案 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]