Python:分类变量的滚动小时时间计数

Python:分类变量的滚动小时时间计数,python,pandas,Python,Pandas,我有一个pandas数据框,其中有列['DateTime','Variable'],我正在尝试获取每个变量在最后一小时的滚动计数。思想支点可以用在某种程度上 样本数据 DateTime Variable 8/24/19 3:30PM A 8/24/19 3:32PM A 8/24/19 3:36PM B 8/24/19 3:50PM C 8/25/19 2:50PM A 预期产量 DateTime

我有一个pandas数据框,其中有列
['DateTime','Variable']
,我正在尝试获取每个
变量在最后一小时的滚动计数。思想支点可以用在某种程度上

样本数据

DateTime             Variable
8/24/19 3:30PM       A
8/24/19 3:32PM       A
8/24/19 3:36PM       B
8/24/19 3:50PM       C
8/25/19 2:50PM       A
预期产量

DateTime          A    B    C
8/24/19 3:30PM    1    0    0 
8/24/19 3:32PM    2    0    0  
8/24/19 3:36PM    2    1    0 
8/24/19 3:50PM    2    1    1
8/25/19 2:50PM    1    0    0

可能会添加或删除新变量,因此我希望有一个动态的解决方案。

考虑到df是您的数据集: 新的_df=df[df['Variable']=='A']。重新采样('H')。计数()

您可以按如下方式创建新的数据帧: final_df=pd.DataFrame({'DateTime':new_df.index,'A':new_df.values})

类似地,获取变量列的每个类别的计数,并尝试使用循环将其连接到最终的_df


我还没有尝试过,但希望它能起作用。

实际上,您可以从
透视开始,或者使用
groupby.unstack来手动操作

然后,您将寻找
df.rolling
,以创建可以使用许多函数聚合的函数。为了使用时间增量(在本例中为1小时)创建窗口,您需要确保索引为
datetime
类型

df['DateTime']=pd.to_DateTime(df['DateTime'])
out=(
df
.groupby(['DateTime','Variable'])#将列设置为索引
.size()#按行计数聚合
.unstack(fill_value=0)#将“Variable”索引级别移动到列
.sort_index()
)
out=out.rolling('1h').sum()
输出

Variable               A    B    C
DateTime
2019-08-24 15:30:00  1.0  0.0  0.0
2019-08-24 15:32:00  2.0  0.0  0.0
2019-08-24 15:36:00  2.0  1.0  0.0
2019-08-24 15:50:00  2.0  1.0  1.0
2019-08-25 14:50:00  1.0  0.0  0.0

@RichieV我基本上想根据我的时间戳计算每个变量在最后一个小时内出现的次数。在8/24/19 3:32,在3:30有一个A和一个A(在最后一个小时内),因此在该时间点上,在最后一个小时内有两个A。此代码将仅对每行计数一次,并按小时分组。。。OP要求的是一个滚动计数,任何一行如果落入多个窗口,都可以进行多次计数……另外,请阅读“谢谢”。这很接近,但是通过使用df['Variable']='A',它无法计算只有'A'的特定时间戳在最后一个小时内的B。然而,我能够使用交叉表、循环和您的方法接近!这是一个非常简单的解决方案!在进行滚动计算时,我还希望避免计算当前行,但我可以使用shift。请参阅