为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

qq_遁去的一_1 2022-07-05 15:33:25
我有一个简单的 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?"))    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 关注
  • 147 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信