首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >巨蟒熊猫在保留索引和列的同时滚动

巨蟒熊猫在保留索引和列的同时滚动
EN

Stack Overflow用户
提问于 2017-04-02 17:33:45
回答 1查看 2.4K关注 0票数 1

我有一个熊猫DataFrame的统计数字为NBA比赛。以下是客场团队的数据样本:

代码语言:javascript
复制
                                  away_team  away_efg  away_drb  away_score
date
2000-10-31 19:00:00    Los Angeles Clippers     0.522      74.4          94
2000-10-31 19:00:00         Milwaukee Bucks     0.434      63.0          93
2000-10-31 19:30:00  Minnesota Timberwolves     0.523      73.8         106
2000-10-31 19:30:00       Charlotte Hornets     0.605      77.1         106
2000-10-31 19:30:00     Seattle SuperSonics     0.429      73.1          88

除了away_score列之外,还有更多的数值列,以及主团队的类似列。

我想要的是,对于每一行,将数字列(分数除外)替换为由team划分的前三个观察值的平均值。通过以下操作,我几乎可以得到我想要的:

代码语言:javascript
复制
home_df.groupby("team").apply(lambda x: x.rolling(window=3).mean())

这个返回,例如,

代码语言:javascript
复制
>>> home_avg[home_avg["team"]=="Utah Jazz"].head()
         3par        ast   blk        drb       efg       ftr        orb
0         NaN        NaN   NaN        NaN       NaN       NaN        NaN
50        NaN        NaN   NaN        NaN       NaN       NaN        NaN
81   0.146667  71.600000   9.4  74.666667  0.512000  0.347667  25.833333

带着这个,还有

代码语言:javascript
复制
>>> home_df[home_df["team"]=="Utah Jazz"].head()
      3par   ast   blk   drb    efg    ftr   orb   stl       team   tov   trb
0    0.118  76.7   7.1  64.7  0.535  0.365  25.6  11.5  Utah Jazz  10.8  42.9
50   0.100  63.9   9.1  80.5  0.536  0.414  27.6   2.2  Utah Jazz  20.2  58.6
81   0.222  74.2  12.0  78.8  0.465  0.264  24.3   7.3  Utah Jazz  13.9  50.0
122  0.119  81.8  11.3  75.0  0.515  0.642  25.0  12.2  Utah Jazz  21.8  52.5
135  0.129  76.7  17.8  75.9  0.650  0.400  37.9   5.7  Utah Jazz  18.8  62.7

演示它在计算平均值时包括当前行。我想避免这件事。更具体地说,第81行的期望输出将是所有的NaNs (因为还没有三个游戏),第122行的3par列中的条目是.146667 (该列中0、50和81行的值的平均值)。

所以,我的问题是,在滚动平均计算中,如何排除当前行?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-02 17:44:15

您可以在这里使用shift,它移动给定数量的索引,使滚动窗口使用最后三个值(不包括当前值):

代码语言:javascript
复制
# create dummy data frame with numeric values
df = pd.DataFrame({"numeric_col": np.random.randint(0, 100, size=5)})
print(df)

    numeric_col
0   66
1   60
2   74
3   41
4   83

df["mean"] = df["numeric_col"].shift(1).rolling(window=3).mean()
print(df)

    numeric_col     mean
0   66              NaN
1   60              NaN
2   74              NaN
3   41              66.666667
4   83              58.333333

因此,将应用函数更改为lambda x: x.shift(1).rolling(window=3).mean(),使其在特定示例中工作。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43171376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档