如何按列分组并得到最平常的n条记录?

时间:2015-11-02 15:55:08

标签: python numpy pandas

我有一个带结构的日期框架

Date          value type
2015-01-01    1     2
2015-01-02    2     3
2015-01-03    1     2
2015-01-03    4     3
2015-01-05    7     5

日期框的索引超过“日期”列。 我需要为每个'类型'获得n个最新记录的平均值。或者每种类型的滚动均值(对我而言,它看起来更复杂,但可能很容易实现)。 如何以最有效的方式进行查询?每个'类型'的循环非常慢。

如果能加快查询速度,我可以创建临时日期结构。

1 个答案:

答案 0 :(得分:0)

假设您的数据框按date排序,您可以编写一个聚合函数来执行此操作:

In [22]:
#simply made your dataframe larger to have more than 2 items per group
print df

         Date  value  type
0  2015-01-01      1     2
1  2015-01-02      2     3
2  2015-01-03      1     2
3  2015-01-03      4     3
4  2015-01-05      7     5
5  2015-01-06      1     2
6  2015-01-07      2     3
7  2015-01-08      1     2
8  2015-01-09      4     3
9  2015-01-10      7     5

In [23]:

df.groupby(['type']).value.agg(lambda x: np.mean(x[-2:])) #2 newest observations

Out[23]:

type
2    1
3    3
5    7
Name: value, dtype: int64