首页 > 解决方案 > 熊猫将帧的移动平均值附加到帧

问题描述

我可以获取一列的 SMA,然后将其附加到数据框而不会出现问题

但是然后我尝试获取满足特定条件的列值的 SMA(所有行的子集,在我的情况下,在最后一个averaging_period homegames df[ df.ha =='H '] )

我得到

ValueError: Length of values does not match length of index

我的代码是错误的,我正在取我想要的主场比赛的移动平均值,但是当它进入客场比赛时它会删除该行,而不是在平均值中跳过它们:

sma = df[df.ha=='H'].f.rolling(window=averaging_period).mean()

df['f_sma%s' % averaging_period] = sma.array

这是我试图附加在一起的东西的长度

len(df)
   Out[3]: 12938
len(sma.array)
   Out[4]: 6458
len(df[df.ha=='H'])
   Out[5]: 6458

任何人都知道我怎样才能让 sma 函数不平均客场比赛的目标,但仍然保留一行,即 sma 的值直到那个点?从而返回一个与我的数据框长度相同的数组?

标签: pythonpandas

解决方案


将滚动值分配给数据框时,您可以使用.loc过滤

import pandas as pd
import numpy as np

t = pd.DataFrame({'G':['a','a','h','a','h','a','a','h'],'scores':[3,2,1,5,3,1,6,5]})

t['avg'] = np.nan

t.loc[t.G=='h','avg'] = t[t.G=='h'].scores.rolling(window=2).mean()

输出:

   G  scores  avg
0  a       3  NaN
1  a       2  NaN
2  h       1  NaN
3  a       5  NaN
4  h       3  2.0
5  a       1  NaN
6  a       6  NaN
7  h       5  4.0

推荐阅读