我在熊猫滚动时遇到了一些麻烦。这是我的数据集的简化版本:
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()
答案 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()