在下面的dataframe
中,我想计算一下每一天的小时数。每项记录重5分钟。DateTime意识到了TZ.
Year data
Timestamp
2008-11-13 16:50:00+09:30 177.83
2008-11-13 16:55:00+09:30 165.73
2008-11-15 17:00:00+09:30 160.34
2008-11-15 17:15:00+09:30 148.90
2008-11-15 17:40:00+09:30 113.66
2008-11-20 17:15:00+09:30 121.12
2008-11-20 17:20:00+09:30 109.55
2008-11-20 17:35:00+09:30 100.86
2008-11-20 17:50:00+09:30 90.72
2008-11-20 07:55:00+09:30 86.27
预期结果是
Year hrs/day
Timestamp
2008-11-13 00:00:00+09:30 0.16666666666666666 # <-- 10 min / 60
2008-11-15 00:00:00+09:30 0.25 # <-- 15 min / 60
2008-11-20 00:00:00+09:30 0.4166666666666667 # <-- 15 min / 60
我就是这么做的。
df['Hour'] = df.index.hour.astype(int)
days = df.resample('D').apply({'Hour':'count'})
这给了我一列“小时”的值,是每天记录的数量。
下一个..。
days['Hr/dy'] = (days['Hour'] * 5.0)/60.0
其中'5.0‘是时间戳间隔。这样,我就能得到预期的结果。
但是,我必须在具有不同时间戳间隔的许多数据帧之间切换。每次切换到新数据时,提供间隔是不方便的。我需要从时间戳索引中自动获得时间戳间隔。
freqdays = pd.infer_freq(df.index[0:10])
给出了一个非整数时间戳频率('5T'),它不能用于数学运算以进一步得到小时。
我需要的要么是:
编辑
原始数据间隔5分钟,有许多记录丢失。每天的开始和结束时间是不同的。
发布于 2020-01-15 17:53:50
您可以尝试获得索引中以秒为单位的最小差值:
print (df.index.to_series(keep_tz=True).sort_values().diff().min().total_seconds())
300.0
因此,为了得到你的结果,每天做一组,乘以指数的最小差,然后除以3600得到小时:
df_agg = df.groupby(df.index.date).count()\
*df.index.to_series(keep_tz=True).sort_values().diff().min().total_seconds()/3600
print (df_agg)
date
2008-11-13 0.166667
2008-11-15 0.250000
2008-11-20 0.416667
https://stackoverflow.com/questions/59756825
复制相似问题