【发布时间】:2020-11-08 09:14:46
【问题描述】:
我有一个名为 pitches 的数据框,其中包含 2019 年 MLB 赛季的每个球场,其中包含 pitcher_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]
)
第一个示例完美运行。第二个返回一个数据帧,其中所有音高类型作为列,但值全为零。谁能告诉我做错了什么或建议另一种方法?
【问题讨论】:
标签: python pandas lambda pandas-groupby list-comprehension