也许pandas.DataFrame.rolling不是最好的方法,请告诉我是否有更好的方法
我想要的是在df上有一个滚动窗口,并且在窗口中可以使用df中的所有列来进行各种计算
我相信下面的代码非常接近我的目标,但我很难理解代码中所述的索引问题
在第一个x.index=RangeIndex(开始=0,停止=2,步骤=1),tmp_df正确选择df中的第一行和第二行(索引0和1)。对于最后一个x.index=RangeIndex(开始=4,停止=6,步骤=1),iloc似乎试图在df中选择超出范围的索引6(df的索引为0到5)
我错过了什么
提前感谢您的建议
import numpy as np
import pandas as pd
df = pd.DataFrame({'open': [7, 5, 10, 11,6,12],
'close': [6, 6, 11, 10,7,10],
'positive': [0, 1, 1, 0,1,0]},
)
def do_calculations_on_any_df_column_in_window(x,df):
print("index:",x.index)
tmp_df = df.iloc[x.index] # raises "ValueError: cannot set using a slice indexer with a different length than the value" when x.index = RangeIndex(start=4, stop=6, step=1) as df index goes from 0 to 5 only
# do calulations on any column in tmp_df, get result
result = 1 #dummyresult
return result
intervals = range(2, 10)
for i in intervals:
df['result_' + str(i)] = np.nan
res = df.rolling(i).apply(do_calculations_on_any_df_column_in_window, args=(df,), raw=False)
df['result_' + str(i)][1:] = res
print(df)
尝试此功能:
你得到了这个结果
相关问题 更多 >
编程相关推荐