gpt4 book ai didi

python - 数据框 : shift expanding mean with groupby

转载 作者:行者123 更新时间:2023-11-28 22:39:37 24 4
gpt4 key购买 nike

我想让扩展均值给出不包括当前项目的结果,即项目的先验平均值。这就是我要找的东西:

d = { 'home' : ['A', 'B', 'B', 'A', 'B', 'A', 'A'], 'away' : ['B', 'A','A', 'B', 'A', 'B', 'B'],
'aw' : [1,0,0,0,1,0,np.nan],'hw' : [0,1,0,1,0,1, np.nan]}

df2 = pd.DataFrame(d, columns=['home', 'away', 'hw', 'aw'])
df2.index = range(1,len(df2) + 1)
df2['homewin_at_home'] = df2.groupby('home')['hw'].apply(pd.expanding_mean)

print df2

结果:

  home away  hw  aw  homewin_at_home
1 A B 0 1 0.000000
2 B A 1 0 1.000000
3 B A 0 0 0.500000
4 A B 1 0 0.500000
5 B A 0 1 0.333333
6 A B 1 0 **0.666667**
7 A B NaN NaN 0.666667

突出显示的数字应为 0.5,因为:“A”在索引 = 6 时赢得了主场 2 场比赛中的 1 场。相反,结果包括这场比赛产生 0.66。实际输出应该是:

  home away  hw  aw  homewin_at_home
1 A B 0 1 NaN
2 B A 1 0 NaN
3 B A 0 0 1.000000
4 A B 1 0 0.000000
5 B A 0 1 0.500000
6 A B 1 0 0.500000
7 A B NaN NaN 0.666667

我尝试过的事情包括添加 .shift(1) 并尝试在 groupby 中切片 [:-1] 但我无法让它工作.也想过引入辅助列,但不知道如何保留原始索引。

我问了一个相关问题here但我更喜欢这种方法而不是 group-apply-split 例程。任何帮助表示赞赏。

最佳答案

这是您要找的吗?计算expanding_meanshifts 结果。

df['homewin_at_home'] = df.groupby('home')['hw'].apply(lambda x: pd.expanding_mean(x).shift())

或者,对于更新版本的 pandas:

df['homewin_at_home'] = df.groupby('home')['hw'].apply(lambda x: x.expanding().mean().shift())

home away hw aw homewin_at_home
1 A B 0 1 NaN
2 B A 1 0 NaN
3 B A 0 0 1.000000
4 A B 1 0 0.000000
5 B A 0 1 0.500000
6 A B 1 0 0.500000
7 A B NaN NaN 0.666667

关于python - 数据框 : shift expanding mean with groupby,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34540509/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com