我在这里可能只是眼睛疲倦,但是我不确定嵌套循环中的混乱。我试图遍历多年然后几个月的内部销售数据,以便获得销售速度,季节性等因素的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。任何帮助将不胜感激!
答案 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)