【发布时间】:2016-06-14 12:48:32
【问题描述】:
如何使用 groupby 在多个级别上操作数据帧?我希望能够做类似的事情
data.groupby('col1').groupby(['col2', 'col3']).apply(foo).apply(bar)
样本数据:
user_id year day hour events
0 1928375096 2015 196 0 6
1 734605009 2016 32 21 1
2 3333305045 2016 29 5 3
3 698115442 2016 30 7 11
4 685465592 2016 26 12 3
5 485945404 2016 24 10 4
6 73202588 2016 25 3 1
7 4380205067 2016 25 8 1
8 408502597 2016 32 9 1
9 584885164 2016 32 10 3
假设 col1 = user_id, col2 = 'year', col3 = 'day',所以我们每天为每个用户获取许多行(最多 24 行)。我们想首先在事件上运行 foo;例如,foo(x) = (x-x.mean())/x.std(),那么我们希望将每个用户的时间序列减少为带有bar 的标量。生成的数据框应包含每个用户一行。
【问题讨论】:
-
相当于
data.groupby(['col1', 'col2', 'col3']),不是吗?如果您发布MVCE,您将获得更多运气。 -
函数
foo和bar如何输入您的公式@TomAugspurger? -
foo和bar是什么?你还没有定义它们或data。 -
data是pandas DataFrame,其列包括col1、col2、col3等,foo和bar是任意函数。这个问题并不仅仅取决于这些函数的定义,因此是占位符名称。
-
我怀疑它确实取决于功能,例如
foo = bar = lambda x: return 1:) 根据您的问题,foo可能在其中包含groupby。很难对一般的、模糊的问题给出一个很好的答案,而不是一次性说出所有内容然后进行操作。