【发布时间】:2014-06-18 09:40:29
【问题描述】:
我正在使用 Python 2.7,并且正在从数据框中按月创建一些特定的汇总指标。然后将每个平均值(jan_avg_prod_count、feb_avg_prod_count 等...)添加到输出文件中。
My main df:
month_num prod_desc prod_count
01 A 52
01 B 43
01 C 38
02 A 21
02 B 24
02 c 18
我所追求的是按月汇总数据帧中的平均 prod_count。现在,我每个月手动汇总以下内容并重复每个月:
jan_df = df[df.month_num == '01']
jan_df = df.groupby(['prod_desc']).agg({'prod_count': np.mean})
jan_df = df.rename(columns = {'prod_count':'jan_avg_prod_count'})
我想要做的是把它放在一个循环中,所以我只有一个代码块。我的方法是循环遍历 1-12 范围,并按上述每个月对我的主要 df 进行子集化。但是,我坚持如何创建数据框并将其分配给动态变量名称。
我正在尝试创建正确数据框的字典,然后分配它们。
month_dfs = {}
for x in range(1,13):
month_dfs[x] = "%s_df" % calendar.month_abbr[x].lower()
loop_month_num = '{num:02d}'.format(num = x)
month_dfs[x] = df[df.month_num == loop_month_num]
上面生成了一个正确值的字典,但是对子集数据框的分配不能正常工作。
如果我打印month_dfs,我会得到我期望的结果:
jan_df
feb_df
mar_df
apr_df
may_df
jun_df
jul_df
aug_df
sep_df
oct_df
nov_df
dec_df
但是,jan_df 没有被创建。相反,month_dfs 字典填充了子集数据框。
>>> month_dfs[x]
month_num prod_desc prod_count
3 02 A 21
4 02 B 24
5 02 C 18
我明白我在做什么是不正确的。我只是不确定如何创建每月数据框。 任何建议或新方向表示赞赏。
【问题讨论】:
-
“无法正常工作” - 这究竟是什么意思?你能提供例子吗?
-
我清理了我的示例并添加了一些输出。
-
df.groupby(['month_num', 'prod_desc'])有什么问题? -
groupby 方法不会为每个月生成单独的指标。