繁体   English   中英

过滤Pandas Dataframe Aggregate

[英]Filtering Pandas Dataframe Aggregate

我有一个padas数据帧,我分组,然后执行聚合计算得到平均值:

grouped = df.groupby(['year_month', 'company'])
means = grouped.agg({'size':['mean']})

这给了我一个数据帧,但我似乎无法将其过滤到我想要的特定公司和year_month:

means[(means['year_month']=='201412')]

给了我一个KeyError

问题是您基于'year_month''company'进行分组。 因此,在means数据帧, year_monthcompany将是指数(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

正如已经指出的那样,你最终会得到一个2级索引。 您可以尝试取消堆叠聚合数据框:

means = df.groupby(['year_month', 'company']).agg({'size':['mean']}).unstack(level=1)

这应该给你一个'year_month'索引,'company'作为列,你的聚合大小作为值。 然后,您可以按索引切片:

means.loc['201412']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM