且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

计算时间序列python中事件的持续时间

更新时间:2023-02-09 12:25:19

我相信这就是您想要的。我已经为每个步骤的代码添加了解释。

I believe this is what you are looking for. I have added explanations to the code for each step.

# create helper columns defining contiguous blocks and day
df['block'] = (df['value'].astype(bool).shift() != df['value'].astype(bool)).cumsum()
df['day'] = df['index'].dt.normalize()

# group by day to get unique block count and value count
session_map = df[df['value'].astype(bool)].groupby('day')['block'].nunique()
hour_map = df[df['value'].astype(bool)].groupby('day')['value'].count()

# map to original dataframe
df['sessions'] = df['day'].map(session_map)
df['hours'] = df['day'].map(hour_map)

# calculate result
res = df.groupby(['day', 'hours', 'sessions'], as_index=False)['value'].sum()
res['duration'] = res['hours'] / res['sessions']
res['amount'] = res['value'] / res['sessions']

结果

         day  sessions  duration  value     amount
0 2003-01-01         6       2.5  127.9  21.316667