[英]Pivot Multiple Pandas Rows into Columns Based on Groupby Max
我對 Python 和 Pandas 還很陌生,遇到了一個我不太確定如何解決的問題。 我有一個 Pandas DataFrame,其中包含在同一年為多支球隊效力的曲棍球運動員:
Player Season Team GP G A TP
Player A 2020 A 10 8 3 11
Player A 2020 B 25 10 5 15
Player A 2020 C 6 4 7 11
Player B 2020 A 30 20 6 26
Player B 2020 B 25 18 5 23
我希望能夠組合包含同一年同一球員的行,並按球員效力最多的球隊排列列。 在上面的例子中,所有 B 隊的數字都將排在第一位,因為球員 A 為 B 隊打了最多的比賽,其次是 A 隊,然后是 C 隊。如果一名球員沒有為多支球隊效力或少於三支球隊,我' d 希望為給定的列填寫 NA。
例如上面的 df 會變成(Team1 代表最高團隊):
Player Season Team1 GP1 G1 A1 TP1 Team2 GP2 G2 A2 TP2 Team3 GP3 G3 A3 TP3
Player A 2020 B 25 10 5 15 A 10 8 3 11 C 6 4 7 11
Player B 2020 A 30 20 6 26 B 25 18 5 23 NA NA NA NA NA
我能想到的解決這個問題的最初方法是使用一系列 groupby max 但我不確定這是否會達到預期的結果。 任何幫助將不勝感激!
你可以排序,然后旋轉:
a=(df.sort_values('GP')
.assign(col=df.groupby(['Player','Season']).cumcount()+1)
.pivot_table(index=['Player','Season'], columns='col', aggfunc='first')
)
# rename:
a.columns = [f'{x}{y}' for x,y in a.columns]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.