此question的略有不同版本。 答案主要是有效的,挑战是我想我需要在每个循环之后更新范围,而且我不完全确定如何实现这一点。
或者,看起来这类似于滚动总和类型的问题,但窗口是动态的,我正在创建新列....(不确定)
无论如何,这是我写完的代码,但我知道它很可怕,仍然是n00b。
更优雅的方法是什么
示例数据
df = pd.DataFrame({'level1': np.random.randint(1, 10, 10),
'level2': np.random.randint(1, 10, 10),
'level3': np.random.randint(1, 10, 10),
'level4': np.random.randint(1, 10, 10),
'level5': np.random.randint(1, 10, 10),
'level6': np.random.randint(1, 10, 10),
'level7': np.random.randint(1, 10, 10),
'level8': np.random.randint(1, 10, 10),
'level9': np.random.randint(1, 10, 10),
'level10': np.random.randint(1, 10, 10),
'level11': np.random.randint(1, 10, 10),
'level12': np.random.randint(1, 10, 10),
'level13': np.random.randint(1, 10, 10),
'level14': np.random.randint(1, 10, 10),
'level15': np.random.randint(1, 10, 10)})
我目前的“工作”解决方案“
orgcols['layers2'] = orgcols.Level2 + orgcols.Level3 + orgcols.Level4 + orgcols.Level5 + orgcols.Level6 + orgcols.Level7 + orgcols.Level8 +orgcols.Level9 + orgcols.Level10 + orgcols.Level11 + orgcols.Level12 + orgcols.Level13 + orgcols.Level14 + orgcols.Level15
orgcols['layers3'] = orgcols.Level3 + orgcols.Level4 + orgcols.Level5 + orgcols.Level6 + orgcols.Level7 + orgcols.Level8 + orgcols.Level9 + orgcols.Level10 + orgcols.Level11 + orgcols.Level12 + orgcols.Level13 + orgcols.Level14 + orgcols.Level15
orgcols['layers4'] = orgcols.Level4 + orgcols.Level5 + orgcols.Level6 + orgcols.Level7 + orgcols.Level8 + orgcols.Level9 + orgcols.Level10 + orgcols.Level11 + orgcols.Level12 + orgcols.Level13 + orgcols.Level14 + orgcols.Level15
orgcols['layers5'] = orgcols.Level5 + orgcols.Level6 + orgcols.Level7 + orgcols.Level8 + orgcols.Level9 + orgcols.Level10 + orgcols.Level11 + orgcols.Level12 + orgcols.Level13 + orgcols.Level14 + orgcols.Level15
orgcols['layers6'] = orgcols.Level6 + orgcols.Level7 + orgcols.Level8 + orgcols.Level9 + orgcols.Level10 + orgcols.Level11 + orgcols.Level12 + orgcols.Level13 + orgcols.Level14 + orgcols.Level15
orgcols['layers7'] = orgcols.Level7 + orgcols.Level8 + orgcols.Level9 + orgcols.Level10 + orgcols.Level11 + orgcols.Level12 + orgcols.Level13 + orgcols.Level14 + orgcols.Level15
orgcols['layers8'] = orgcols.Level8 + orgcols.Level9 + orgcols.Level10 + orgcols.Level11 + orgcols.Level12 + orgcols.Level13 + orgcols.Level14 + orgcols.Level15
orgcols['layers9'] = orgcols.Level9 + orgcols.Level10 + orgcols.Level11 + orgcols.Level12 + orgcols.Level13 + orgcols.Level14 + orgcols.Level15
orgcols['layers10'] = orgcols.Level10 + orgcols.Level11 + orgcols.Level12 + orgcols.Level13 + orgcols.Level14 + orgcols.Level15
orgcols['layers11'] = orgcols.Level11 + orgcols.Level12 + orgcols.Level13 + orgcols.Level14 + orgcols.Level15
orgcols['layers12'] = orgcols.Level12 + orgcols.Level13 + orgcols.Level14 + orgcols.Level15
orgcols['layers13'] = orgcols.Level13 + orgcols.Level14 + orgcols.Level15
orgcols['layers14'] = orgcols.Level14 + orgcols.Level15
orgcols['layers15'] = orgcols.Level15
答案 0 :(得分:1)
你必须使用两个循环,一个用于图层,内部循环用于求和部分。
for i in range(2,15):
t='layers'+i
orgcols[t]=0
for j in range(i,15):
orgcols[t]=orgcols[t]+orgcols['Level'+j]
我只是尝试在几行中减少代码,并且由于没有提供数据而没有尝试运行此代码,因此,如果发生任何错误,请发表评论。
答案 1 :(得分:0)
更新,这是最终代码。问题是我需要创建一个带有1个循环的新列,然后编写一个循环来对列进行求和。先前的代码:
for i in range(2, 15, 1):
orgcols['layers_'+str(i)] = orgcols.loc[:,'Org_Chart_Level_2_Name_int':'Org_Chart_Level_15_Name_int'].sum(axis=1)
创建新列并总结,但由于我需要以递减的方式跳过列,我需要第二个循环,如下所示:
for i in range(2,16):
t='layers'+str(i)
orgcols[t]=0
for j in range(i,16):
orgcols[t]=orgcols[t]+orgcols['Level'+str(j)]