数据帧列上的While循环?

2024-04-27 03:53:05 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我想创建一个while循环,将百分比列中的值相加,直到达到.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


Tags: 数据org排序错误counter计数器论坛百分比
3条回答

使用:

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

你能用这个例子来帮助你吗

import pandas as pd

retail_pareto = 0
orgs = []
for i,row in retailerDF.iterrows():
    if retail_pareto <= .80:
        retail_pareto += row['RETAILER_PCT_OF_CHANGE']
        orgs.append(row)
    else:
        break

new_df = pd.DataFrame(orgs)

编辑:使其更像您的示例,并添加了新的数据帧

而不是你的循环,采取一种更为泛泛而谈的方法。 首先计算一个包含累积和的附加列 零售商的变化百分比:

df['pct_cum'] = df.RETAILER_PCT_OF_CHANGE.cumsum()

对于您的数据,结果是:

   ORG  RETAILER_PCT_OF_CHANGE   pct_cum
0  KST                0.582561  0.582561
1  ISL                0.290904  0.873465
2  BOV                0.254456  1.127921
3  BRH                0.108240  1.236161
4  GNT                0.091363  1.327524
5  DSH                0.023441  1.350965
6  RDM               -0.011967  1.338999
7  JBL               -0.034889  1.304109
8  JBD               -0.071883  1.232226
9  WEG               -0.232227  0.999999

现在,要打印包含80%更改的行, 在超出限制的第一行结束,运行:

df[df.pct_cum.shift(1).fillna(0) < 0.8]

结果加上累计总和为:

   ORG  RETAILER_PCT_OF_CHANGE   pct_cum
0  KST                0.582561  0.582561
1  ISL                0.290904  0.873465

相关问题 更多 >