亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在數據幀列上循環時?

在數據幀列上循環時?

人到中年有點甜 2022-08-25 13:41:16
我有一個由兩列組成的小數據幀,一列是ORG列和一列百分比列。數據幀根據百分比列從大到小排序。我想創建一個 while 循環,將百分比列中的值相加,直到達到 .80 (80%) 的值。到目前為止,我已經嘗試過:retail_pareto = 0counter = 0while retail_pareto < .80:    retail_pareto += retailerDF[counter]['RETAILER_PCT_OF_CHANGE']    counter += 1這不起作用,計數器和計數器以及retail_pareto值都保持在零,沒有真正的錯誤消息來幫助我解決我做錯了什么。理想情況下,我想得到一個列表,列出加起來加起來占80%的最大百分比的組織。我不確定下一步該嘗試什么。我已經搜索了這些論壇,但還沒有在論壇中找到類似的東西。任何建議或幫助都非常感謝。謝謝。Example Dataframe:ORG    PCTKST    0.582561ISL    0.290904BOV    0.254456BRH    0.10824GNT    0.0913631DSH    0.023441RDM    -0.0119665JBL    -0.0348893JBD    -0.071883WEG    -0.232227The output that I would expect would be something along the lines of:ORG    PCTKST    0.582561ISL    0.290904
查看完整描述

3 回答

?
一只名叫tom的貓

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)

編輯:使其更像您的示例,并添加了新的數據幀。


查看完整回答
反對 回復 2022-08-25
?
皈依舞

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


查看完整回答
反對 回復 2022-08-25
?
紅糖糍粑

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


查看完整回答
反對 回復 2022-08-25
  • 3 回答
  • 0 關注
  • 139 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號