对行进行迭代,为超过0的项请求输入,存储响应

2024-09-29 23:26:14 发布

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

我有一个简单的DF,我用groupby和sum来清理。现在我想迭代每一行,如果orderqty有一个值>;0,询问用户“我们分配了多少项{item name}?”并存储此响应

存储的响应需要保留itmdesc(项的名称)。目标是稍后迭代未分组的数据帧,并通过将现有的数字除以存储的响应数字,为每一行创建一个新列

示例DF和代码: 显然,这段代码不起作用,但我对将输入与ItErrors相结合感到非常困惑。我遇到了无数错误,当前的错误是“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

Tags: 代码用户gtgodf错误数字row
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,这似乎是您正在做的事情

解决办法其实很简单。迭代行,将响应存储为列表,然后将列表作为列添加到数据帧中。类型不同,因此我需要更改类型,然后根据需要在新列中执行数学运算。当我重构所有东西时,也许是一种更干净的方法,但现在就开始运行吧!谢谢大家

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']

相关问题 更多 >

    热门问题