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