如何以逻辑方式收集循环输出

时间:2019-06-22 04:11:08

标签: python pandas nested-loops

我在这里可能只是眼睛疲倦,但是我不确定嵌套循环中的混乱。我试图遍历多年然后几个月的内部销售数据,以便获得销售速度,季节性等因素的df(最终图表)。出于某种原因,我一直在第一年覆盖所有数据列。

关于我能想到的所有语法调整。我想我的眼睛很累...

annual_sales = [] # make empty list for revenue data
annual_sales_df = pd.DataFrame(index = range(1, 13)) # make empty df to collect lists

for i in range(2013, currentYear):
    for j in range(0, 12 + 1):
        annual_sales.append(df.loc[(df['stageName'] == 'Awarded Won') & (df['fiscalYear'] == i) & (df['Month'] == j), 'revenue'].sum()) # collect annual revenue in a list - this part is working correctly, I just left it in for context
    out_df = pd.DataFrame(annual_sales) # put sales list into df
    annual_sales_df = annual_sales_df.merge(annual_out_df, left_index = True, right_index = True, how = 'inner') # merge the intermediate df onto the larger df as columns
print(annual_sales_df) # print the df

我希望按列显示每月的年销售额,而2013-2018年的6列数据构成6 x 12 df。任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

range()函数返回一个数字序列,默认情况下从0开始,以1递增(默认),并以指定的数字结束。

语法:

range(start, stop, step)

这里,需要注意的重要一件事是停靠点是排他性的。因此,如果您要运行从1到12(总共12个月)的循环,请替换for j in range(0, 12 + 1)for j in range(1, 13)

此外,在merge()内部传递了错误的数据帧。之前没有创建annual_out_df数据框,但是有out_df。因此,我认为在该函数中应使用out_df代替annual_out_df

答案 1 :(得分:0)

1)。对范围(1,13)中的j使用->>   。 #这里包括1,不包括13。      #range(开始,结束,步骤)

2)。 ““ annual_sales_df.merge(annual_out_df,left_index = True,right_index = True,how ='内部')”。
  这里没有名称为Annual_out_df的数据框,请使用out_df。

annual_sales = [] 
annual_sales_df = pd.DataFrame(index = range(1, 13))
for i in range(2013, currentYear):
    for j in range(1, 13):  # New Change
        annual_sales.append(df.loc[(df['stageName'] == 'Awarded Won') & 
        (df['fiscalYear'] == i) & (df['Month'] == j), 'revenue'].sum()) 
    out_df = pd.DataFrame(annual_sales) 
    annual_sales_df = annual_sales_df.merge(out_df, left_index = True, 
    right_index = True, how = 'inner')      # New Change
print(annual_sales_df)