我对满足条件的最后 'n' 个事件中的 'm' 次次数感兴趣,按 person 或 user 分组。具体来说,我感兴趣的是球员是否习惯在给定的级别或“类别”中打球,这取决于他们最近几场比赛(而不是任何比赛)中有多少场比赛达到或高于指定水平。
我尽职尽责地从玩具数据集中分解了一组进行工作,并让我的代码在下面工作。但是,当我尝试在SeriesGroupBy对象上随意使用相同的方法链时,事情就会崩溃。
首先,最简单的例子。列hc(高级)是1玩家之前 3 场比赛中有 2 场属于第 3 类。否则为 0。(我手动生成并使用了 0|1,而不是 True|False。):
import pandas as pd
pd.__version__
# '0.23.4'
match = ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c',
'c', 'c', 'd', 'd', 'd', 'e', 'e', 'e', 'e']
category = [3, 3, 3, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2]
player = ['bar', 'baz', 'chaz', 'baz', 'choo', 'chaz', 'chaz', 'foo',
'baz', 'choo', 'foo', 'char', 'baz', 'choo', 'foo', 'chaz', 'baz']
hc = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1]
games = pd.DataFrame({'match': match, 'category': category, 'player': player, 'hc': hc})
games
# match category player hc
# 0 a 3 bar 0
# 1 a 3 baz 0
# 2 a 3 chaz 0
# 3 b 2 baz 0
# 4 b 2 choo 0
# 5 b 2 chaz 0
# 6 c 3 chaz 0
# 7 c 3 foo 0
# 8 c 3 baz 0
# 9 c 3 choo 0
# 10 d 3 foo 0
# 11 d 3 char 0
# 12 d 3 baz 1
# 13 e 2 choo 0
# 14 e 2 foo 1
# 15 e 2 chaz 1
# 16 e 2 baz 1
由于我之前的长期努力受阻,我采用了(显然是幼稚的)策略,即打破一个有趣的玩家并让计算在拆分组上工作:
baz = games.groupby('player').get_group('baz')
baz
成功!我是熊猫黑客!我已经扬升,现在可以在潘多瑞克之路上辅导他人!首先,在我购买长袍并在修道院领取指定的婴儿床之前,让我快速检查一下:
games.groupby('player').category.gt(2).rolling(3).sum().shift().gt(1)
回溯(最近一次调用):文件“”,第 1 行,在文件“(无聊的路径内容)/lib/python3.6/site-packages/pandas/core/groupby/groupby.py”,第 762 行,在getattr 中 返回 self._make_wrapper(attr) 文件“(无聊的路径内容)/lib/python3.6/site-packages/pandas/core/groupby/groupby.py”,第 799 行,在 _make_wrapper 中引发 AttributeError(msg) AttributeError:无法访问“SeriesGroupBy”对象的可调用属性“gt”,尝试使用“apply”方法
啊。我是暴民。
这样做的好方法是什么?另外,我做错了什么?在元级别,为什么我对单个组进行操作然后泛化的策略不起作用?我确实尝试过这种apply()方式。它输出废话。
饮歌长啸
相关分类