我有一個包含 4858 行和 67 列的資料框。這包含每個 MLB 球隊本賽季每場比賽的統計資料。這意味著對于每場比賽,都有兩行資料。一個是來自一支球隊的統計資料,另一個是來自他們效力的球隊的統計資料。以下是列名:['AB'、'R'、'H'、'RBI'、'BB'、'SO'、'PA'、'BA'、'OBP'、'SLG'、'OPS' ,'Pit','Str','RE24','WinOrLoss','Team','Opponent','HomeOrAway','url','Win_Percentage','R_Season_Long_Count','H_Season_Long_Count','BB_Season_Long_Count',' SO_Season_Long_Count'、'PA_Season_Long_Count'、'R_Moving_Average_3'、'R_Moving_Average_10'、'
然后,這是這些列的輸出圖片。對不起,它只是來自幾列,但基本上所有的統計資料都只是這樣的數字。

這個問題最重要的列是 url 列。此列標識所玩的游戲,因為每個游戲只有一個唯一的 url。但是,資料框中將有兩行具有此唯一 url,因為其中一行將包含該游戲中一支球隊的統計資料,另一行將包含該比賽中另一支球隊的統計資料。
現在,我想做的是通過在它們之間創建一個比率來組合由公共 url 標識的這兩行。因此,對于具有唯一 url 的特定游戲,我想將第一支球隊的統計資料除以第二支球隊的統計資料。我想為每個游戲/獨特的網址執行此操作。我可以使用 groupby.sum() 函式對它們求和,但我不確定如何找到具有相同 url 的兩行之間的比率。我真的很感激任何建議。非常感謝!
uj5u.com熱心網友回復:
假設:
- 每個網址總是 2 行
- 在每個 url 中,在 2 行中,你不關心哪個被哪個分割
您的資料集的一個小示例:
df = pd.DataFrame({
'url': ['1', '1', '2', '2', '3', '3'],
'non-stat1': np.arange(1., 7.),
'non-stat2': np.arange(2., 8.),
'stat1': np.arange(13., 19.),
'stat2': np.arange(6., 12.),
})
這列出了您要應用除法的統計資訊的列。
columns_for_ratio = ['stat1', 'stat2']
這就是分工的作業方式。.values得到一個總是有兩行的陣列,因此您可以將陣列解壓縮為兩個變數,每個變數一個陣列。
def divide(two_rows):
x, y = two_rows.values
return pd.Series(x/y, two_rows.columns)
最后做除法
df.groupby('url')[columns_for_ratio].apply(divide)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/429576.html
標籤:Python 熊猫 数据框 通过...分组 熊猫-groupby
上一篇:通過在兩個DF中匹配colC,將colA插入DF1,并使用來自DF2['colB']的vals
下一篇:使用pandas抓取免費代理串列
