Pandas 以大熊猫为单位重新采样/聚合间隔
对于包含每个项目的活动时间间隔的给定数据帧,我想计算一段时间内活动项目的总数(可能重新采样) 例如,对于数据帧Pandas 以大熊猫为单位重新采样/聚合间隔,pandas,dataframe,intervals,Pandas,Dataframe,Intervals,对于包含每个项目的活动时间间隔的给定数据帧,我想计算一段时间内活动项目的总数(可能重新采样) 例如,对于数据帧 df = pd.DataFrame({ 'item': ['a', 'b', 'c', 'd'], 'active': [ pd.Interval(pd.Timestamp('2021-04-01 00:00:00'), pd.Timestamp('2021-04-05 00:00:05')), pd.Interval(pd.Timest
df = pd.DataFrame({
'item': ['a', 'b', 'c', 'd'],
'active': [
pd.Interval(pd.Timestamp('2021-04-01 00:00:00'), pd.Timestamp('2021-04-05 00:00:05')),
pd.Interval(pd.Timestamp('2021-04-01 00:30:00'), pd.Timestamp('2021-04-01 01:30:00')),
pd.Interval(pd.Timestamp('2021-04-01 01:00:00'), pd.Timestamp('2021-04-02 02:00:00')),
pd.Interval(pd.Timestamp('2021-04-01 01:00:00'), pd.Timestamp('2021-04-01 01:00:05'))]})
在2021-04-01 00:45:00,有两个活动项(a
和b
),在2021-04-03 01:00:00只有一个(a
)
如何执行此操作?从,您可以使用中的运算符检查pd.Timestamp()
是否在pd.Interval()中。因此,您可以在每一行上使用apply()
,检查要检查的日期是否在活动列中。然后使用检索所需的行
date\u to\u check='2021-04-01 00:45:00'
df.loc[df.apply(lambda行:pd.Timestamp(日期到检查)在第['active']行中,轴=1)]
'''
项目活动
0A(2021-04-012021-04-0500:00:05)
1B(2021-04-01 00:30:00,2021-04-01 01:30:00)
'''
我认为尚未实施,因此请使用:
s = pd.concat([pd.Series(r.item,pd.date_range(r.active.left,r.active.right, freq='15Min'))
for r in df.itertuples()])
print (s)
2021-04-01 00:00:00 a
2021-04-01 00:15:00 a
2021-04-01 00:30:00 a
2021-04-01 00:45:00 a
2021-04-01 01:00:00 a
..
2021-04-02 01:15:00 c
2021-04-02 01:30:00 c
2021-04-02 01:45:00 c
2021-04-02 02:00:00 c
2021-04-01 01:00:00 d
Length: 492, dtype: object
然后:
s = s.groupby(level=0).size()
print (s)
2021-04-01 00:00:00 1
2021-04-01 00:15:00 1
2021-04-01 00:30:00 2
2021-04-01 00:45:00 2
2021-04-01 01:00:00 4
..
2021-04-04 23:00:00 1
2021-04-04 23:15:00 1
2021-04-04 23:30:00 1
2021-04-04 23:45:00 1
2021-04-05 00:00:00 1
Length: 385, dtype: int64