如何在循环法中将每一行值递增到给定整数的某个范围
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))
尝试将整数值拆分为数据帧中的每一行
我有一个 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))