簡體   English   中英

根據 dataframe Python 中另一列的值計算一列的移動平均值(熊貓)

[英]Calculating Moving Average of a column based on values of another column in a dataframe Python (Pandas)

我正在嘗試為 nba 球員創建一個 10 天移動平均得分列。 我的 dataframe 有每個玩家的逐場統計數據,我想讓移動平均列包含當時的 10 天移動平均線。 我試過 df.groupby('player')['points].rolling(10,1).mean,但這只是給了我當天得分的移動平均數。 列出了每天的所有球員,然后 dataframe 移動到第二天,所以我可以有幾百行具有相同日期但不同球員的統計數據。 任何幫助將不勝感激。 謝謝。

如前所述,您確實應該提供一個示例數據集,並展示您想要實現的目標。 但是,我喜歡處理運動數據,所以不介意花一分鍾左右的時間來獲取樣本集。

所以基本上你需要對 groupby 做一個滾動平均值。 你會注意到每個玩家的前 10 行顯然是空白的,因為它沒有 10 個日期來取平均值。 您可以通過將 min 更改為 1 來更改它。此外,當您這樣做時,您希望確保您的數據按日期排序(這里已經是)。

import pandas as pd

player_link_list = ['https://www.basketball-reference.com/players/l/lavinza01/gamelog/2021/',
                    'https://www.basketball-reference.com/players/v/vucevni01/gamelog/2021/',
                    'https://www.basketball-reference.com/players/j/jamesle01/gamelog/2021/',
                    'https://www.basketball-reference.com/players/d/davisan02/gamelog/2021/']

dfs = []
for link in player_link_list:
    w=1
    df = pd.read_html(link)[-1]
    df = df[df['Rk'].ne('Rk')]   
    df = df[df['PTS'].ne('Inactive')]   
    df['Player'] = link.split('/')[-4]
    df['PTS'] = df['PTS'].astype(int,errors = 'ignore')
    dfs.append(df)
    

df = pd.concat(dfs)

df['rolling_10_avg'] = df.groupby('Player')['PTS'].transform(lambda s: s.rolling(10, min_periods=10).mean())  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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