我有一个名为Pitchs的数据框,其中包含2019年MLB赛季的每一个投球,并包含投手id和投球类型列
我想按pitcher_id分组并计算每种音高类型的实例,我可以使用groupby().agg()方法进行分组,例如:
pitches.groupby('pitcher_id')['pitchType'].agg(
[('Four-Seam Fastball',lambda pitchType: (pitchType=='Four-Seam Fastball').sum()),
('Curveball',lambda pitchType: (pitchType=='Curveball').sum())]
)
我希望能够通过列表理解来实现这一点,但是当我尝试使用它时,结果列返回所有零。以下是我正在尝试的:
pitch_types = ['Four-Seam Fastball', 'Slider', 'Curveball', 'Changeup', 'Sinker']
pitches.groupby('pitcher_id')['pitchType'].agg(
[(x,lambda pitchType: (pitchType==x).sum()) for x in pitch_types]
)
第一个例子完美无瑕。第二个返回一个数据帧,其中所有节距类型均为列,但值均为零。有人能告诉我哪里做错了,或者建议一种替代方法吗
让我们在这里试试
value_counts
:这样做的想法是过滤数据帧,只保留想要计算的值(让自己相信这不需要在groupby中完成,因此速度会快得多),然后您可以简单地计算每个组中剩下的值
相关问题 更多 >
编程相关推荐