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

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

遍歷行,請求輸入超過 0 的項目,存儲響應

遍歷行,請求輸入超過 0 的項目,存儲響應

qq_遁去的一_1 2022-07-05 15:33:25
我有一個簡單的 DF,我使用 groupby 和 sum 進行清理?,F在我想遍歷每一行,如果 orderqty 的值 >0,請詢問用戶“我們分配了多少這個項目 {項目名稱}?” 然后存儲此響應。存儲的響應需要保留 itmdesc(項目名稱)。目標是稍后迭代未分組的數據幀,并通過將現有數字除以存儲的響應數為每一行創建一個新列。示例 DF 和代碼:顯然此代碼不起作用,但我對將輸入與 iterrows 結合起來感到非常迷茫。我遇到了無數錯誤,當前錯誤是“str”對象不可調用。先感謝您。for i, row in sums.iterrows():      if sums.orderqty > 0:          num = int(input("How many (row.itmdesc[i]) were we allocated?"))    orderqtyitmdesc ALCATEL 1X EVOLVE   72ALCATEL 3V  50ALCATEL 7   0ALCATEL GO FLIP 0ALCATEL GO FLIP 3   28ALCATEL JOY TAB 53
查看完整描述

2 回答

?
小唯快跑啊

TA貢獻1863條經驗 獲得超2個贊

我可以從后面看到您的第三行需要縮進。此外,如果您要同時遍歷兩個對象,則需要正常使用 zip() 函數。我通常不使用 .iterrows 來遍歷表,我喜歡執行以下操作;


這將帶您瀏覽所有列和每個列中的所有行,您還可以遍歷索引或范圍(len(df)),這將為您提供一個可以與 df.iloc[rownum,colnum] 一起使用的 num

for i in df:

    print(i)

    for j in df[i]:

        print(i,j)

如果您變得緩慢和詳細,還列出生成器可能會有所幫助。


它們遵循下面的一般語法并且可以嵌套;


obj = [i if i > 0 else 0 for i in iterable]

編輯:我也認為您的字符串被轉換為 int 存在一個主要問題。您無法將整個字符串轉換為 int,這就是您正在做的事情


查看完整回答
反對 回復 2022-07-05
?
九州編程

TA貢獻1785條經驗 獲得超4個贊

解決方案實際上非常簡單。遍歷行,將響應存儲為列表,然后將列表作為列添加到 Dataframe。類型不一樣,所以我需要更改類型,然后我可以根據需要在新列中執行數學運算。當我重構所有內容時,也許是一種更清潔的方法,但現在啟動并運行!謝謝大家。


allocations= []

for i, j in sums.iterrows():

    answer = input(f"How much of {i} were we allocated?")

    allocations.append(answer)


sums['allocation'] = allocations

sums = sums.astype({'orderqty':float,'allocation':float})

sums['order_percent'] = sums['orderqty']/sums['allocation']


查看完整回答
反對 回復 2022-07-05
  • 2 回答
  • 0 關注
  • 167 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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