分組資料並擷取具有最大計數值的行
要確定群組內具有最大計數值的行,可以使用groupby 操作pandas DataFrame。
考慮以下內容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 |
範例1:
我們的目標是辨識每個群組中的行(由[' Sp', 'Mt'] 定義)最高計數值。在範例1 中,我們有以下預期輸出:
Sp | Mt | Value | count |
---|---|---|---|
MM1 | S1 | a | 3 |
MM1 | S3 | cb | 5 |
MM2 | S3 | mk | 8 |
MM2 | S4 | bg | 10 |
MM4 | S2 | uyi | 7 |
要實現此目的,我們可以先取得每個組的最大計數值:
df.groupby(['Sp', 'Mt'])['count'].max()
這會產生:
Sp | Mt | |
---|---|---|
MM1 | S1 | 3 |
MM1 | S3 | 5 |
MM2 | S3 | 8 |
MM2 | S4 | 10 |
MM4 | S2 | 7 |
然後,擷取原始DataFrame的索引,其中計數值等於每個索引中的最大值group:
idx = df.groupby(['Sp', 'Mt'])['count'].transform(max) == df['count'] df[idx]
這將產生所需的輸出。
範例2:
在範例2 中,預期輸出如下:
Sp | Mt | Value | count |
---|---|---|---|
MM2 | S4 | bg | 10 |
MM4 | S2 | cb | 8 |
MM4 | S2 | uyi | 8 |
在此場景中,MM4 組內有多行具有最大計數值(8)。使用與之前相同的方法,我們得到兩行:
Sp | Mt | Value | count |
---|---|---|---|
MM2 | S4 | bg | 10 |
MM4 | S2 | cb | 8 |
MM4 | S2 | uyi | 8 |
更新:
如果目標是向DataFrame 添加一個新列,指示每個組內的最大計數值,我們可以使用轉換方法來計算每個組的值row :
df.groupby(['Sp', 'Mt'])['count'].max()
這將產生一個包含count_max 欄位的DataFrame,其中包含每個列的最大計數值組:
Sp | Mt | Value | count | count_max |
---|---|---|---|---|
MM1 | S1 | a | 3 | 3 |
MM1 | S1 | n | 2 | 3 |
MM1 | S3 | cb | 5 | 5 |
MM2 | S3 | mk | 8 | 8 |
MM2 | S4 | bg | 10 | 10 |
MM2 | S4 | dgd | 1 | 10 |
MM4 | S2 | rd | 2 | 7 |
MM4 | S2 | cb | 2 | 7 |
MM4 | S2 | uyi | 7 | 7 |
以上是如何在 Pandas 中尋找組內具有最大計數值的行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!