大熊猫组滚动不均匀时间

时间:2017-09-28 00:03:03

标签: python 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

我想有一个10秒的滚动窗口,以获得以下输出:

       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() 

2 个答案:

答案 0 :(得分:0)

我想你必须尝试这个:

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

答案 1 :(得分:0)

这可能是这个例子的诀窍,但我不确定这是一个足够好的解决方案:

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