猿问

遍历行,请求输入超过 0 的项目,存储响应

我有一个简单的 DF,我使用 groupby 和 sum 进行清理。现在我想遍历每一行,如果 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?"))

    orderqty

itmdesc 

ALCATEL 1X EVOLVE   72

ALCATEL 3V  50

ALCATEL 7   0

ALCATEL GO FLIP 0

ALCATEL GO FLIP 3   28

ALCATEL JOY TAB 53


qq_遁去的一_1
浏览 148回答 2
2回答

小唯快跑啊

我可以从后面看到您的第三行需要缩进。此外,如果您要同时遍历两个对象,则需要正常使用 zip() 函数。我通常不使用 .iterrows 来遍历表,我喜欢执行以下操作;这将带您浏览所有列和每个列中的所有行,您还可以遍历索引或范围(len(df)),这将为您提供一个可以与 df.iloc[rownum,colnum] 一起使用的 numfor 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,这就是您正在做的事情

九州编程

解决方案实际上非常简单。遍历行,将响应存储为列表,然后将列表作为列添加到 Dataframe。类型不一样,所以我需要更改类型,然后我可以根据需要在新列中执行数学运算。当我重构所有内容时,也许是一种更清洁的方法,但现在启动并运行!谢谢大家。allocations= []for i, j in sums.iterrows():    answer = input(f"How much of {i} were we allocated?")    allocations.append(answer)sums['allocation'] = allocationssums = sums.astype({'orderqty':float,'allocation':float})sums['order_percent'] = sums['orderqty']/sums['allocation']
随时随地看视频慕课网APP

相关分类

Python
我要回答