我有一个padas数据框,我将其分组,然后执行聚合计算以获得平均值:
grouped = df.groupby(['year_month', 'company'])
means = grouped.agg({'size':['mean']})
这给了我一个数据帧,但我似乎无法将其过滤到我想要的特定公司和year_month:
means[(means['year_month']=='201412')]
给我一个KeyError
答案 0 :(得分:1)
问题在于您是基于'year_month'
和'company'
进行分组的。因此,在means
DataFrame中,year_month
和company
将成为索引(MutliIndex)的一部分。当您访问其他列时,无法访问它们。
执行此操作的一种方法是获取索引级别'year_month'
的值。示例 -
means.loc[means.index.get_level_values('year_month') == '201412']
演示 -
In [38]: df
Out[38]:
A B C
0 1 2 10
1 3 4 11
2 5 6 12
3 1 7 13
4 2 8 14
5 1 9 15
In [39]: means = df.groupby(['A','B']).mean()
In [40]: means
Out[40]:
C
A B
1 2 10
7 13
9 15
2 8 14
3 4 11
5 6 12
In [41]: means.loc[means.index.get_level_values('A') == 1]
Out[41]:
C
A B
1 2 10
7 13
9 15
答案 1 :(得分:1)
正如已经指出的那样,你最终会得到一个2级索引。您可以尝试取消堆叠聚合数据框:
means = df.groupby(['year_month', 'company']).agg({'size':['mean']}).unstack(level=1)
这应该给你一个'year_month'索引,'company'作为列,你的聚合大小作为值。然后,您可以按索引进行切片:
means.loc['201412']