2017-03-17 68 views
0

这个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 

回答

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] 

我只是试图减少几行代码,并没有尝试运行这个由于没有提供数据,所以,如果发生任何错误请评论。

+0

对不起有关,我已经添加了用于创建示例数据集的代码 –

+0

谢谢您澄清我需要2个循环,超新的python(obvs) 做了一些微小的修改,但是这完全按照需要工作。再次感谢 –

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)]