python - 计算事件持续时间 pandas
问题描述
我正在尝试按照此 SO 帖子的第一个答案来计算事件持续时间。帖子中的示例是降雨持续时间,人们想知道降雨的总和以及降雨事件的持续时间(以小时为单位)。
我的场景是一个类似的时间序列,但应用程序是一个泵,我想知道泵每天运行的总持续时间(以小时为单位)。我的数据是泵速命令,只要泵速大于 0.0,泵就会运行。
首先,我正在将我的 CSV 文件读入 Pandas。
#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
除了我在尝试将我的Date
索引转换为日期时间时遇到问题。这会返回一个ValueError: day is out of range for month
有人知道解决这个问题吗?最后,这是我试图从 SO post 1st answer 重新创建的代码,作者正在创建帮助列...
# create helper columns defining contiguous blocks and day
df['block'] = (df['Pump4VFD'].astype(bool).shift() != df['Pump4VFD'].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']
我的数据如下所示:
Pump4VFD
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
解决方案
您可能希望将 dayfirst=True 添加到 pd.to_datetime
df.index = pd.to_datetime(df.index,dayfirst=True)
这可能是一种方法;但如果不起作用,请尝试以下添加:
df.index = pd.to_datetime(df.index,dayfirst=True,infer_datetime_format=True)
如果您需要进一步说明,请尝试这篇文章:ValueError: day is out of range for month
推荐阅读
- c# - 通过 ExcelDataReader 导入 *.xlsx 数据,受影响的记录数为 0
- angular - 如何在角度 6 中实现 $('button').click(function()
- c# - C#订阅和取消订阅事件 - 从“字符串”
- html - 为什么我的自定义字体不显示(HTML、CSS、BEGINNER)
- javascript - 在 Puppeteer 中进行 Web Scraping 时如何处理验证码?
- spring - 如何修复 ModelAttributes 返回空值?
- quarkus - quarkus-maven-plugin 是否支持多模块项目?
- python - 使用 python 从 arduino 读取 usb 信号时出现极大噪音
- python - 为什么 allshortestpath 这么慢?
- python - 如果Kafka中不存在主题,如何使用kafka-python动态创建主题