[英]How to extract the mid- timestamp in an minute timeseries python?
问题是当太阳在地平线以上时计算一天中每个小时的中点。
例如:当日出在上午 8.42 时,我需要上午 8.42 到上午 9:00 之间的中间时间戳,然后再需要上午 9:00 到上午 10:00 之间的中间时间戳,依此类推。
当太阳高于地平线时,我使用 pvlib 生成了时间序列,这是 2019 年 1 月 1 日第一个小时的时间序列。 时间序列存储在数据框中。
时间序列:
2019-01-01 08:42:00+01:00
2019-01-01 08:43:00+01:00
2019-01-01 08:44:00+01:00
2019-01-01 08:45:00+01:00
2019-01-01 08:46:00+01:00
2019-01-01 08:47:00+01:00
2019-01-01 08:48:00+01:00
2019-01-01 08:49:00+01:00
2019-01-01 08:50:00+01:00
2019-01-01 08:51:00+01:00
2019-01-01 08:52:00+01:00
2019-01-01 08:53:00+01:00
2019-01-01 08:54:00+01:00
2019-01-01 08:55:00+01:00
2019-01-01 08:56:00+01:00
2019-01-01 08:57:00+01:00
2019-01-01 08:58:00+01:00
2019-01-01 08:59:00+01:00
2019-01-01 09:00:00+01:00
我需要在这个分钟的时间序列中获得中间的一个,这意味着我需要获得其中任何一个。
2019-01-01 08:50:00+01:00
2019-01-01 08:51:00+01:00
一个非常有趣的问题,我在处理太阳辐射时间序列时也遇到过几次。 首先,如果你提供一个小例子,它总是更容易,例如:
import pandas as pd
import numpy as np
date_range = pd.date_range('2019-01-01 08:42',periods=200, freq='1min')
df = pd.DataFrame(index=date_range, data={'data':np.arange(len(date_range))})
一种解决方案是使用每个时间步的分钟定义一列,然后进行平均重采样并将平均分钟作为 timedelta 添加到索引中:
df['minute'] = df.index.minute
dfr = df.resample('1h').mean()
dfr['middle_time'] = dfr.index + pd.to_timedelta(dfr['minute']+0.5, unit='min')
print(dfr.head())
这导致:
data minute middle_time
2019-01-01 08:00:00 8.5 50.5 2019-01-01 08:51:00
2019-01-01 09:00:00 47.5 29.5 2019-01-01 09:30:00
2019-01-01 10:00:00 107.5 29.5 2019-01-01 10:30:00
2019-01-01 11:00:00 167.5 29.5 2019-01-01 11:30:00
2019-01-01 12:00:00 198.5 0.5 2019-01-01 12:01:00
当然,您也可以将分钟偏移量添加到索引本身,具体取决于您是否将索引或日期时间列传递给 PVLib。
你可以尝试这样的事情:
df['Time'] = pd.to_datetime(df['Time'])
df['Time'] = df['Time'].sort_values()
print(df.loc[int(len(df['Time'])/2)]['Time'])
2019-01-01 08:51:00+01:00
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.