Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通过行的迭代_Python_Pandas_Dataframe - Fatal编程技术网

Python 通过行的迭代

Python 通过行的迭代,python,pandas,dataframe,Python,Pandas,Dataframe,我对如何使用while和for循环有点困惑。 我希望达到以下目标: 设置阈值以停止进程 如果初始值低于此阈值,则对于每个数字,将同一行中的值相加 更新该值的计数器 检查更新值:如果仍低于阈值,则继续求和,直到达到阈值 我将阈值设置为2,并将计数器n初始化为0。我试过这样的逻辑: while n <= threshold: # need to keep the while loop for x in df['Value']: # need to keep the

我对如何使用while和for循环有点困惑。 我希望达到以下目标:

  • 设置阈值以停止进程
  • 如果初始值低于此阈值,则对于每个数字,将同一行中的值相加
  • 更新该值的计数器
  • 检查更新值:如果仍低于阈值,则继续求和,直到达到阈值
我将
阈值设置为2
,并将计数器
n
初始化为
0
。我试过这样的逻辑:

    while n <= threshold:  # need to keep the while loop
      for x in df['Value']:  # need to keep the for loop
        # create new columns by sum      
        n=n+1 # increase the counter by 1
由于
n=0
小于阈值(
2
),我创建了一个新的列,其总和为:

Value Sum
1      1
2      2
3      3
我使用n=1,所以我将

Value Sum  Sum1
1      1     2
2      2     4
3      3     6
依此类推(在本例中,直到n=2)。 我期望的输出是

Value Sum  Sum1 Sum2
1      1     2   4
2      2     4   8
3      3     6   12

我的代码的问题是,当达到阈值时它不会停止。

IIUC,一个简单的
for循环
求和就足够了

for i in range(threshold+1):
    df[f'Sum{i}'] = df.sum(1)
或者,您可以尝试更有效的
Numpy方法

a = df['Value'].values[:, None] * 2 ** np.r_[:threshold + 1]
df.join(pd.DataFrame(a).add_prefix('Sum'))


谢谢你,Shubham。然而,我想知道,在我的代码中有什么是不起作用的。现在还不清楚为什么代码在到达目标时不停止迭代threshold@LdM很高兴我能帮忙!请您编辑您的问题,添加一些代码,以便我可以看到问题?@LdM该语句
df[“Sum”]=df.iloc[:,-c_previous:]。除此之外,Sum(axis=1)
似乎不正确;增加计数器值的语句应该在for循环外,但在while循环内,我看不出在代码中更新
c\u previous
值的位置。我建议您不要使用基于循环的方法,因为对数据帧的行进行迭代确实是个坏主意。有道理吗?非常感谢你,Shubham。这绝对有道理:)@LdM快乐编码!
a = df['Value'].values[:, None] * 2 ** np.r_[:threshold + 1]
df.join(pd.DataFrame(a).add_prefix('Sum'))
   Value  Sum0  Sum2  Sum3
0      1     1     2     4
1      2     2     4     8
2      3     3     6    12