Python 如何计算数据帧的修改移动平均值?
关于大熊猫的移动平均线有数百个例子,但我的情况略有不同,我正在寻找一些Pythonic解决方案: 要求: 给定一个窗口,例如5,我想计算coumnPython 如何计算数据帧的修改移动平均值?,python,pandas,Python,Pandas,关于大熊猫的移动平均线有数百个例子,但我的情况略有不同,我正在寻找一些Pythonic解决方案: 要求: 给定一个窗口,例如5,我想计算coumntarget的修改移动平均值,并将结果转储到一个新列中,例如,MA: 对于从0到3的索引(前四个),使用SUM(0到目标的索引)/(索引+1) 对于索引>=window-1(本例中为4),它是一个正常的MA(5)。我假设MA(5)从第五元素开始 我尝试的是: 首先,我知道我可以使用: df[maname] = df.rolling(window=win
target
的修改移动平均值,并将结果转储到一个新列中,例如,MA
:
对于从0到3的索引(前四个),使用SUM(0到目标的索引
)/(索引+1)
对于索引>=window-1(本例中为4),它是一个正常的MA(5)。我假设MA(5)从第五元素开始
我尝试的是:
首先,我知道我可以使用:
df[maname] = df.rolling(window=win)[target].mean()
计算正常MA(win)并转储到列maname
然后我尝试了其他几种方法,但没有一种有效:
df[maname] = df[target][:df.index + 1].sum() / (df.index + 1) if df.index < win else df.rolling(window=win)[target].mean()
错误:
TypeError:无法使用这些索引器对进行切片索引
下一次尝试:
我没有技巧,所以我决定使用普通C++方法:循环穿越索引(这个算法实际上不同于移动平均值,但这不是我现在的问题)
df.index中的idx的:
循环=0
而loop如果你在处理股票数据,你可以试一试。
以下是示例代码:
stock = StockDataFrame.retype(pd.read_csv('stock.csv'))
stock['close_5_sma']
谢谢@Mark我没有使用股票数据,但我假设我仍然可以使用此功能?我来看看,谢谢!你可以@NicholasHumphrey您只需将列名设置为“close”似乎是一种简单的方法,只需使用临时列进行两次传递即可。对索引列和普通移动平均列进行窗口平均,然后将它们随意相加。
for idx in df.index:
loop = 0
while loop <= idx:
df[maname].iloc[idx] = df[maname].iloc[idx] + df[target].iloc[loop]
loop = loop + 1
if idx < win:
df[maname].iloc[idx] = df[maname].iloc[idx] / (idx + 1)
else:
df[maname].iloc[idx] = df[maname].iloc[idx] / win
for idx in range(0, 23):
loop = 0
while loop <= idx:
dfToWrite.at[idx, 'MA'] = dfToWrite.at[idx, 'MA'] + 5
loop = loop + 1
if idx < 5:
dfToWrite.at[idx, 'MA'] = dfToWrite.at[idx, 'MA'] / (idx + 1)
else:
dfToWrite.at[idx, 'MA'] = dfToWrite.at[idx, 'MA'] / 5
stock = StockDataFrame.retype(pd.read_csv('stock.csv'))
stock['close_5_sma']