簡體   English   中英

Pandas groupby().agg() 在列表理解中帶有 lambda

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM