我有一個包含 4 個 NBA 賽季資料的 Pandas 資料框,其中賽季從 2017-18 賽季開始,并已轉換為虛擬變數,如下所示。
Salary VORP ... Season_2019-20 Season_2020-21
Player ...
Nikola Joki? 29542010.0 0.931373 ... 0 1
James Harden 28299399.0 0.843137 ... 0 0
James Harden 30570000.0 1.000000 ... 0 0
Giannis Antetokounmpo 24157304.0 0.813725 ... 0 0
Rudy Gobert 23491573.0 0.558824 ... 0 0
我想使用下面的函式將工資列除以當年的工資帽。
def pct_cap(row):
if row['Season_2017-18'] == 1:
return final_data['Salary'] / 99093000
if row['Season_2018-19'] == 1:
return final_data['Salary'] / 101869000
if row['Season_2019-20'] == 1:
return final_data['Salary'] / 109140000
if row['Season_2020-21'] == 1:
return final_data['Salary'] / 109140000
return 1
但是,當我使用下面的代碼應用該函式時,它完全改變了資料框的形狀,因為它似乎將該函式應用于每一列,而不僅僅是 Salary 列。
此功能發生的邏輯是什么,將工資除以工資帽的最佳方法是什么?我是初學者,任何幫助將不勝感激。
x = final_data.apply(lambda row: pct_cap(row), axis=1)
Player Nikola Joki? James Harden ... Alec Burks Vince Carter
Player ...
Nikola Joki? 0.270680 0.259294 ... 0.099372 0.021934
James Harden 0.298124 0.285584 ... 0.109448 0.024158
James Harden 0.290000 0.277802 ... 0.106465 0.023500
Giannis Antetokounmpo 0.290000 0.277802 ... 0.106465 0.023500
Rudy Gobert 0.290000 0.277802 ... 0.106465 0.023500
uj5u.com熱心網友回復:
你的pct_cap功能很奇怪。問題是,對于每一行,它都回傳一個系列而不是一個數字。它應該回傳一個球員的工資,而不是每個人的工資。
像這樣嘗試:
def pct_cap(row):
if row['Season_2017-18'] == 1:
return row['Salary'] / 99093000
if row['Season_2018-19'] == 1:
return row['Salary'] / 101869000
if row['Season_2019-20'] == 1:
return row['Salary'] / 109140000
if row['Season_2020-21'] == 1:
return row['Salary'] / 109140000
return 1
x = final_data.apply(pct_cap, axis=1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/383804.html
上一篇:如何將Pandas資料框中的嵌套逗號分隔列轉換為Python中的特定格式
下一篇:從資料框中的輸出值中洗掉[]
