Python 熊猫使用带递减窗口的滚动求和创建新列

Python 熊猫使用带递减窗口的滚动求和创建新列,python,pandas,Python,Pandas,与此稍有不同的版本。 答案大部分是有效的,挑战是我认为我需要在每次循环后更新范围,我不完全确定如何完成这一点 或者,这似乎类似于滚动求和类型的问题,但窗口是动态的,我正在创建新的列…(不确定) 无论如何,这是我最后写出来的代码,但我知道它很糟糕,仍然是n00b 有什么更优雅的方法可以做到这一点 样本数据 df = pd.DataFrame({'level1': np.random.randint(1, 10, 10), 'level2': np.random.ran

与此稍有不同的版本。 答案大部分是有效的,挑战是我认为我需要在每次循环后更新范围,我不完全确定如何完成这一点

或者,这似乎类似于滚动求和类型的问题,但窗口是动态的,我正在创建新的列…(不确定)

无论如何,这是我最后写出来的代码,但我知道它很糟糕,仍然是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)})
我当前的“有效”解决方案”


您必须使用两个循环,一个用于层,另一个用于内部循环,以完成求和部分

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个循环的新列,然后编写一个循环来对列求和。以前的代码:

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

很抱歉,我添加了创建示例数据集的代码感谢您澄清我需要2个循环,python的超级新成员(obvs)做了一些轻微的修改,但这完全符合需要。再次感谢
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)]