当分组数据的顺序很重要时,如何聚合数据?(如果可以用一种优雅的矢量化方法来完成,则可以得到加分)。如果这很明显,让我举个例子来解释。
假设我在df
中有数据:
id month value
------------------------------
001 2019-01-01 (Jan) 111
001 2019-02-01 (Feb) 222
001 2019-03-01 (Mar) 333
002 2019-01-01 (Jan) 0
002 2019-02-01 (Feb) 0
002 2019-03-01 (Mar) 25
... ... ...
999 2019-01-01 (Jan) 800
999 2019-02-01 (Feb) 600
999 2019-03-01 (Mar) 400
我可以使用groupby
来汇总每个id
上的数据:
df.groupby('id')['value'].agg([numpy.sum, numpy.mean])
是否使用numpy.sum
,numpy.mean
,numpy.max
等作为聚合函数,分组的孤立数组的顺序无关紧要(例如{{1 }} [111, 222, 333]
)-结果将始终相同。
但是,有些聚合对顺序很重要-例如,我可能要计算:
id=001
-Mar
)当前,我遍历每个Jan
,然后:
id
过滤数据df[df['id']==id]
[(Jan,111), (Feb,222), (Mar,333)]
例如,如果我只想查找排序数组的第一个元素与最后一个元素之间的差异,那么我将得出以下结论:
'month'
当分组数据的顺序很重要时,如何汇总数据?
我能否通过使用矢量化而不是遍历每个id finish_minus_start
------------------------
001 222
002 25
... ...
999 -400
来更有效地做到这一点?
答案 0 :(得分:0)
我希望这是您想要的。 您可以使用聚合并设置自己的函数。我从两个链接中举了一个例子 Summarizing and Grouping data和First and Last Functions并玩了一点。
df= df.set_index('date')
aggregations = {
'value': lambda x: x.loc[x.index.max()] - x.loc[x.index.min()]
}
print(df.groupby('id').agg(aggregations))