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