如何在循环法中将每一行值递增到给定整数的某个范围

how to increment each row value in round robin method till some extent of given integer

尝试将整数值拆分为数据帧中的每一行

我有一个 pandas 数据框,有 4 行,整数为 5。最终结果第一行应该有 2,其余 3 行应该有 1。

df=pd.DataFrame(['a','b','c','d'],columns=['name'])
df['val']=0
no=5
while no>0:
    for row in df['val']:
           df['val']= row+1
           no-=1

'最终必须从 'no' 中取出一个计数并添加到数据帧中的每一行

我需要遍历数据帧中的行并增加单元格值直到任何所述整数计数。

预期产出

1 次迭代后 df 将如下所示并且 no 将递减到 4

df=pd.DataFrame(list(zip(['a','b','c','d'],[1,0,0,0])),columns=['name','val'])

在第二次迭代后 df 将如下所示并且 no 将递减到 3

df=pd.DataFrame(list(zip(['a','b','c','d'],[1,1,0,0])),columns=['name','val'])

并且此迭代进行到任何给定的整数。所以对于这种情况,第 4 次迭代将如下所示,并且不会递减到 1

df=pd.DataFrame(list(zip(['a','b','c','d'],[1,1,1,1])),columns=['name','val'])

最后的第 5 次迭代将如下所示,no 将递减为 0 并结束循环

df=pd.DataFrame(list(zip(['a','b','c','d'],[2,1,1,1])),columns=['name','val'])

据我了解,您希望第一行以外的每一行中的值为 1,并且第一行中的值为 [no -(非第一行的数量)]。您可以通过以下方式获得:

df['col'] = 1
df.loc[0, 'col'] = no - (len(df) - 1)

值得一提的是,在使用 pandas 时,几乎总是要避免在行上循环。您几乎可以做所有事情而无需在行上使用循环(而且速度更快)。

编辑: 如果由于其他原因必须循环 no,这是实现您在已编辑问题中所要求的最佳方法:

df['val'] = 0
no = 5
for i in range(no):
    df.iloc[i % len(df), -1] += 1

但是如果你真的不需要循环,只是在val中获取输出,使用:

df.loc[df.reset_index().index, 'val'] = no // len(df) + 1 * (df.reset_index().index < no % len(df))