Pandas Groupby滚动不平衡的时间



我在熊猫滚动时遇到了一些麻烦。这里是我的数据集的简化版本:

df2 = pd.DataFrame({  
    'A' : pd.Categorical(["test","train","test","train",'train','hello']), 
    'B' : (pd.Timestamp('2013-01-02 00:00:05'),
                   pd.Timestamp('2013-01-02 00:00:10'),
                   pd.Timestamp('2013-01-02 00:00:09'),
                   pd.Timestamp('2013-01-02 00:01:05'),
                   pd.Timestamp('2013-01-02 00:01:25'),
                   pd.Timestamp('2013-01-02 00:02:05')),
         'C' : 1.}).sort_values('A').reset_index(drop=True)
>>> df2
       A                   B    C
0  hello 2013-01-02 00:02:05  1.0
1   test 2013-01-02 00:00:05  1.0
2   test 2013-01-02 00:00:09  1.0
3  train 2013-01-02 00:00:10  1.0
4  train 2013-01-02 00:01:05  1.0
5  train 2013-01-02 00:01:25  1.0

我想拥有一个10s的滚动窗口,以获取以下输出:

       A  count
0  hello   1
1   test   2
3  train   1

我尝试groupby并滚动。

df2.groupby('A').rolling('10s', on='B', closed='right').C.sum() 

我从过去的" 10s"观察中获取滚动窗户,这不是我想要的:

A      B                  
hello  2013-01-02 00:02:05    1.0
test   2013-01-02 00:00:05    1.0
       2013-01-02 00:00:09    2.0
train  2013-01-02 00:00:10    1.0
       2013-01-02 00:01:05    1.0
       2013-01-02 00:01:25    1.0 

我也尝试重新采样,但我无法获得结果。

grouped = df3.set_index('B').groupby('A').resample('S' )['C'].count()
grouped.reset_index().groupby('A').rolling(window=10,on='B' , min_periods=1).sum() 

我认为您必须尝试一下:

df2.groupby('A').rolling('11s', on='B').agg({'C': 'sum'}).groupby('A').max()

这可能在此示例上可以解决这个问题,但是我不确定它是否足够好:

df2.groupby('A').rolling('10s', on='B').agg({'C': 'sum'}).groupby("A").max()

最新更新