我正在尝试参考此SO post,在该答案中,某人创建了一些代码来分析降雨的时间序列数据,并为每个降雨事件按小时总计。我想做类似的事情,只是从时间序列数据中汇总每天几小时内泵运行(事件)的频率。我不需要在活动的持续时间上累计其他任何信息。
#read CSV file
df = pd.read_csv('C:\\Users\\desktop\\data.csv', index_col='Date', parse_dates=True)
# Converting the index as date
df.index = pd.to_datetime(df.index)
df
我的数据如下:
ChWaterPrs
Date
1/0/00 12:45 AM 0.0
1/0/00 12:50 AM 0.0
1/0/00 12:55 AM 0.0
1/0/00 12:00 AM 0.0
1/0/00 1:05 AM 0.0
我知道每次df['ChWaterPrs']
大于5时泵都在运行,因此我正在尝试建立SO文章中提到的这些辅助柱:
# create helper columns, a block would be anytime value is > 5
df['block'] = df['ChWaterPrs'] >= 5
df['day'] = df.index.normalize()
# group by day to get unique block count and value count
session_map = df[df['ChWaterPrs'].astype(bool)].groupby('day')['block'].nunique()
hour_map = df[df['ChWaterPrs'].astype(bool)].groupby('day')['ChWaterPrs'].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)['ChWaterPrs'].sum()
res['duration'] = res['hours'] / res['sessions']
res['amount'] = res['ChWaterPrs'] / res['sessions']
但是,如果我打印res
,就搞砸了……持续时间超过一天24小时就没有意义。基本上,我想拥有的唯一信息是泵运行的resample
的时间序列数据中的hours
,其中df['ChWaterPrs']
大于5。我认为数据将每天显示(一个会话),其中df['ChWaterPrs']
为零,否则在运行时大于5。任何提示都可以帮助您。