Python 如何计算数据帧的修改移动平均值?

Python 如何计算数据帧的修改移动平均值?,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

关于大熊猫的移动平均线有数百个例子,但我的情况略有不同,我正在寻找一些Pythonic解决方案:

要求: 给定一个窗口,例如5,我想计算coumn
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']