簡體   English   中英

基於 Groupby Max 將多個 Pandas 行轉為列

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

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