【问题标题】:Applying multiple rolling functions to multiple columns of a pandas groupby rolling object?将多个滚动功能应用于熊猫 groupby 滚动对象的多列?
【发布时间】:2017-08-01 18:34:53
【问题描述】:

我希望执行以下操作:

  1. 对数据框进行分组

  2. 为每个组生成时间窗口(给定时间单位)

  3. 在生成的结构中,获取每一列并应用多个滚动汇总统计函数,以便结果具有每个组/时间窗口组合的汇总统计。

这是一个示例数据集:

gps_time,name,val_x,val_y
2017-07-04 11:20:23.423,bob,0.963,0.201
2017-07-04 11:20:24.492,bob,0.964,0.203
2017-07-04 11:20:24.499,bob,0.962,0.210
2017-07-04 11:20:25.627,sarah,0.893,0.010
2017-07-04 11:20:28.627,sarah,0.894,0.012
2017-07-04 11:20:29.613,sarah,0.895,0.014
2017-07-04 11:20:29.630,larry,-0.423,0.231
2017-07-04 11:20:30.423,larry,-0.431,0.22
2017-07-04 11:20:30.428,larry,-0.432,0.222

以及上述数据的所需输出,按名称分组,窗口为 1 秒:

name,gps_time,val_x_mean,val_x_med,val_y_mean,val_y_med
bob,2017-07-04 11:20:23.423,0.963,0.963,0.201,0.201
bob,2017-07-04 11:20:24.492,0.963,0.963,0.2065,0.2065
sarah,2017-07-04 11:20:25.627,0.893,0.89,0.010,0.010
sarah,2017-07-04 11:20:28.627,0.8945,0.8945,0.013,0.013
larry,2017-07-04 11:20:30.423,-0.4287,-0.431,0.336,0.222

我尝试使用列表推导来生成一堆数据帧,但这个过程真的很慢,我必须为每一列调用它。

【问题讨论】:

    标签: python pandas pandas-groupby


    【解决方案1】:

    让我们使用groupbypd.Grouper

    df_out = df.groupby([pd.Grouper(freq='S', key='gps_time'),'name']).agg(['mean','median'])
    df_out.columns = df_out.columns.map('_'.join)
    df_out.reset_index()
    

    输出:

                 gps_time   name  val_x_mean  val_x_median  val_y_mean  \
    0 2017-07-04 11:20:23    bob      0.9630        0.9630      0.2010   
    1 2017-07-04 11:20:24    bob      0.9630        0.9630      0.2065   
    2 2017-07-04 11:20:25  sarah      0.8930        0.8930      0.0100   
    3 2017-07-04 11:20:28  sarah      0.8940        0.8940      0.0120   
    4 2017-07-04 11:20:29  larry     -0.4230       -0.4230      0.2310   
    5 2017-07-04 11:20:29  sarah      0.8950        0.8950      0.0140   
    6 2017-07-04 11:20:30  larry     -0.4315       -0.4315      0.2210   
    
       val_y_median  
    0        0.2010  
    1        0.2065  
    2        0.0100  
    3        0.0120  
    4        0.2310  
    5        0.0140  
    6        0.2210  
    

    【讨论】:

    • 这太完美了!如何指定跨区间的特定百分比重叠?
    • 解释重叠百分比,我将如何计算?
    • 50% 重叠意味着给定两个区间,第 k 个区间的后 50% 是第 (k+1) 个区间的前 50%。例如,如果我们有列表 [1, 2, 3, 4, 5, 6, 7, 8],生成具有 50% 重叠的区间和 4 个观察窗口将导致 [1, 2, 3, 4] , [3, 4, 5, 6], [5, 6, 7, 8]。
    • @BrandonSherman 这听起来有点像您需要滚动功能。您介意创建一个包含输入和预期输出的新问题吗?
    • 没问题!由于我在此处的示例没有重叠,因此我将从问题中删除对重叠的提及并创建一个新的。
    猜你喜欢
    • 2017-10-29
    • 1970-01-01
    • 2019-12-19
    • 1970-01-01
    • 1970-01-01
    • 2020-10-24
    • 1970-01-01
    • 2021-08-17
    • 2013-03-08
    相关资源
    最近更新 更多