問題:
從 pandas DataFrame中擷取具有最大計數的行「count」列的最大值,按「Sp」和「Mt」分組
範例:
範例1:
輸入DataFrame:
Sp | Mt | Value | count |
---|---|---|---|
MM1 | S1 | a | 3 |
MM1 | S1 | n | 2 |
MM1 | S3 | cb | 5 |
MM2 | S3 | mk | 8 |
MM2 | S4 | bg | 10 |
MM2 | S4 | dgd | 1 |
MM4 | S2 | rd | 2 |
MM4 | S2 | cb | 2 |
MM4 | S2 | uyi | 7 |
預期輸出:
Sp | Mt | Value | count |
---|---|---|---|
MM1 | S1 | a | 3 |
MM1 | S3 | cb | 5 |
MM2 | S3 | mk | 8 |
MM2 | S4 | bg | 10 |
MM4 | S2 | uyi | 7 |
範例 2:
輸入DataFrame:
Sp | Mt | Value | count |
---|---|---|---|
MM2 | S4 | bg | 10 |
MM2 | S4 | dgd | 1 |
MM4 | S2 | rd | 2 |
MM4 | S2 | cb | 8 |
MM4 | S2 | uyi | 8 |
預期輸出:
Sp | Mt | Value | count |
---|---|---|---|
MM2 | S4 | bg | 10 |
MM4 | S2 | cb | 8 |
MM4 | S2 | uyi | 8 |
解:
import pandas as pd df.groupby(['Sp', 'Mt'])['count'].max()
這將傳回一個系列,其中包含「Sp」和「Sp」的每個唯一組合的最大計數「Mt」。
idx = df.groupby(['Sp', 'Mt'])['count'].transform(max) == df['count']
這將建立一個布林掩碼,其中True 表示具有最大計數的行他們的小組。
df[idx]
這會過濾DataFrame 以僅包含idx 遮罩為True 的行,從而產生所需的輸出。
注意: 如果多個行出現在同一組中,則將傳回最大計數相等的多行。
以上是如何取得分組 Pandas DataFrame 中最大計數的行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!