首页 > 解决方案 > 在数据框列上循环?

问题描述

我有一个小数据框,由两列组成,一个 ORG 列和一个百分比列。数据框根据百分比列从大到小排序。

我想创建一个 while 循环,将百分比列中的值相加,直到达到 0.80(80%)的值。

到目前为止,我已经尝试过:

retail_pareto = 0
counter = 0
while retail_pareto < .80:
    retail_pareto += retailerDF[counter]['RETAILER_PCT_OF_CHANGE']
    counter += 1

这不起作用,计数器和计数器以及retail_pareto 值都保持为零,没有真正的错误消息来帮助我解决我做错的事情。理想情况下,我希望最终得到一份百分比最大的组织列表,这些组织的总和达到 80%。

我不确定接下来要尝试什么。我搜索了这些论坛,但还没有在论坛中找到类似的东西。

非常感谢任何建议或帮助。谢谢你。

Example Dataframe:
ORG    PCT
KST    0.582561
ISL    0.290904
BOV    0.254456
BRH    0.10824
GNT    0.0913631
DSH    0.023441
RDM    -0.0119665
JBL    -0.0348893
JBD    -0.071883
WEG    -0.232227



The output that I would expect would be something along the lines of:
ORG    PCT
KST    0.582561
ISL    0.290904

标签: pythonpandasdataframe

解决方案


采用:

df_filtered = df.loc[df['PCT'].shift(fill_value=0).cumsum().le(0.80),:]
#if you don't want include where cumsum is greater than 0,80
#df_filtered = df.loc[df['PCT'].cumsum().le(0.80),:] 
print(df_filtered)
   ORG       PCT
0  KST  0.582561
1  ISL  0.290904

推荐阅读