Pandas重新采样创建新的每小时数据

0h4hbjxa  于 2022-10-23  发布在  其他
关注(0)|答案(2)|浏览(167)

我正在使用重采样功能将分钟数据转换为小时数据。问题是我的原始DF只有10:30到15:59的数据,新的重采样数据正在创建新的小时数据。如何删除这些数据,或者让它只对索引上的时间戳进行重新采样,而不创建新的时间戳。
这就是原始DF的外观:

这是重采样DF的外观:

我的问题是:如何从重新采样中获得其他小时的数据,并仅包括原始DF中的前一小时数据?
下面是我用来创建重采样DF的代码

ROD['time'] = pd.to_datetime(ROD['timestamp'])
ROD.set_index('time', inplace = True, drop = True)
resampled = ROD.resample('60Min',origin='start').agg({'open':'first',
                                                      'high':'max',
                                                      'low': 'min',
                                                      'close': 'last', 'volume':'sum'})

下面是打印重采样的输出:

open        high         low       close    volume
time                                                                         
2020-09-28 10:31:00  333.984985  334.470001  332.779999  333.750000   6482408
2020-09-28 11:31:00  333.760010  334.260010  333.109985  333.469910   4456465
2020-09-28 12:31:00  333.475006  334.500000  333.190002  334.239990   3711147
2020-09-28 13:31:00  334.239990  334.820007  334.174988  334.501099   4181924
2020-09-28 14:31:00  334.500000  334.959992  334.079987  334.600006   5698198
                         ...         ...         ...         ...       ...
2022-09-23 11:31:00  367.779999  368.170013  365.070007  365.119995   9603892
2022-09-23 12:31:00  365.109985  367.190002  364.825012  365.778412   9306106
2022-09-23 13:31:00  365.769989  366.649994  364.089996  364.829895   9172447
2022-09-23 14:31:00  364.820007  366.480011  363.290008  366.221405  14831712
2022-09-23 15:31:00  366.220001  368.040008  366.000000  367.440002  14253081
hmtdttj4

hmtdttj41#

按时间列筛选是您需要的吗?试试这个;

begin_ts = '9/28/2020: 10:30' 
end_ts = '9/28/2020: 15:30'

df.set_index('time',inplace=True)
new_df = df.iloc[df.index.get_loc(begin_ts):df.index.get_loc(begin_ts)].copy()

尽管如此,请考虑使用更好的索引(如时间戳)进行索引。

s4n0splo

s4n0splo2#

由于时间段跨越了多天,它导致了一天中的所有小时(每天24小时)。
一种方法是使用between_time过滤时间范围的结果集

resampled.between_time('10:30:00', '13:59:00')

相关问题