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