3 回答

TA贡献1906条经验 获得超3个赞
你能用这个例子来帮助你吗?
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)
编辑:使其更像您的示例,并添加了新的数据帧。

TA贡献1851条经验 获得超3个赞
而不是循环,采取一种更乐观的方法。首先计算包含累积RETAILER_PCT_OF_CHANGE总和的附加列:
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

TA贡献1815条经验 获得超6个赞
用:
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
添加回答
举报