[英]Pandas groupby().agg() with lambdas in a list comprehension
我有一個 dataframe 稱為 pitches,從 2019 年 MLB 賽季開始,每個音高都帶有 pitcher_id 和 pitch type 列。
我想按 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]
)
第一個例子完美無缺。 第二個返回 dataframe,所有音高類型作為列,但值全為零。 誰能告訴我做錯了什么或建議另一種方法?
讓我們在這里嘗試value_counts
:
(pitches.query("pitchType in @pitch_types")
.groupby('pitcher_id')['pitchType']
.value_counts())
這個想法是過濾你的 DataFrame 只保留你想要計算的值(說服自己這不需要在 groupby 內完成,所以它會更快),然后你可以簡單地計算你在每個里面剩下的團體。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.