簡體   English   中英

根據總百分比選擇 pandas dataframe 中的組

[英]Selecting groups in pandas dataframe based on percentage of total

col_a   col_b
a        10
a        20
c        10
c        5
d        20
e        30

col_b的總數為 95。我只想 select 那些col_b值的總和超過總數的 80%(95)的行。 在這種情況下,每組的總和是

a 30
c 15
d 20
e 30

在這種情況下,我們從最大的開始並繼續包含col_a行,直到超過 95 的 80& 即超過 76。 因此最終結果將是:

col_a   col_b
a        10
a        20
d        20
e        30

即我們將在col_a中排除對應於c的行。 如何使用 Pandas 實現這一目標?

一種方法是:

(
    df
        .set_index('col_a')[
            df
                .groupby('col_a')
                .sum()
                .sort_values(by='col_b', ascending=False)
                .cumsum()
                .lt(df.col_b.sum()*0.8)
                .shift(fill_value=True)
        ]
        .dropna()
        .reset_index()
)

或在一長行中相同:

df.set_index('col_a')[df.groupby('col_a').sum().sort_values(by='col_b', ascending=False).cumsum().lt(df.col_b.sum()*0.8).shift(fill_value=True)].dropna().reset_index()

Output:

  col_a  col_b
0     a   10.0
1     a   20.0
2     d   20.0
3     e   30.0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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