Pandas创建新的列使用滚动总和递减风

2024-09-28 01:28:30 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Tags: nprandomrandintlevel5level7level6level8level13
2条回答

更新,这里是最后的代码。问题是,我需要用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)]

必须使用两个循环,一个用于层,另一个用于内部循环,以完成求和部分。你知道吗

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]

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

相关问题 更多 >

    热门问题