熊猫重新采样数据框与“窗口尺寸” /“频率”(Resample Pandas Dataframe w

2019-10-19 01:00发布

9I具有多索引数据帧,我想通过重新取样的3(意味着每3行成为一个)的因子,以减少数据点的频率。

这个:

                    time  value
   ID  measurement  
ET001            0     0      2
                 1  0.15      3
                 2   0.3      4
                 3  0.45      3
                 4   0.6      3
                 5  0.75      2
                 6   0.9      3
ET002            0     0      2
                 1  0.16      5
                 2  0.32      4
                 3  0.45      3
                 4   0.6      3
                 5  0.75      2

我想变成这样:

                    time  value
   ID  measurement  
ET001            0  0.15      3 
                 1   0.6    2.7
                 2   0.9      3
ET002            0  0.16    3.7 
                 1   0.6    2.7

我试图把我的时间列到像这么大熊猫日期时间指数,然后再使用重采样:

df = df.set_index(pd.DatetimeIndex(timecourse_normed['Time']))
df = df.groupby(level=0).resample(rule='0.1S', how=np.mean) 

但是,第一行给我实际日期(1970出头),这是第二条线很无助。 浏览arund堆栈溢出,我发现一些类似quiestios所有有不基于熊猫的重采样解决方案 - 而且,不幸的是,没有可行的我的使用情况。

你能帮我个忙吗?

Answer 1:

我认为这个想法对你可能是-每个里面分记录ID为箱3记录每个(如NTILE(3)通过它SQL)组和计算平均。 为了创建这个数字,我们可以使用的事实,你已经拥有的每一行序列号- measurement指标的水平。 因此,我们可以仅仅通过除以这个数字3来获得我们所需要的数字:

>>> df
                   time  value  ntile
ID    measurement                  
ET001 0            0.00      2      0
      1            0.15      3      0
      2            0.30      4      0
      3            0.45      3      1
      4            0.60      3      1
      5            0.75      2      1
      6            0.90      3      2
ET002 0            0.00      2      0
      1            0.16      5      0
      2            0.32      4      0
      3            0.45      3      1
      4            0.60      3      1
      5            0.75      2      1

因此,我们可以使用辅助函数这样并将其应用到各组获得预期的效果。

>>> def helper(x):
...     x = x.reset_index()
...     x = x.groupby(x['measurement'].div(3)).mean()
...     del x['measurement']
...     return x
... 
>>> df.groupby(level=0).apply(helper)
                   time     value
ID    measurement                
ET001 0            0.15  3.000000
      1            0.60  2.666667
      2            0.90  3.000000
ET002 0            0.16  3.666667
      1            0.60  2.666667

希望能帮助到你。



文章来源: Resample Pandas Dataframe with “bin size”/“frequency”