1

问题是当太阳在地平线以上时计算一天中每个小时的中点。

例如:当日出在上午 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

4

2 回答 2

1

一个非常有趣的问题,我在处理太阳辐射时间序列时也遇到过几次。首先,如果你提供一个小例子,它总是更容易,例如:

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。

于 2020-04-25T21:26:35.930 回答
0

你可以尝试这样的事情:

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
于 2020-04-25T19:03:26.667 回答