我有一个带有日期和刻度数据的数据框,如下所示
Date Bid
0 20160601 00:00:00.020 160.225
1 20160601 00:00:00.136 160.226
2 20160601 00:00:00.192 160.225
3 20160601 00:00:00.327 160.230
4 20160601 00:00:01.606 160.231
5 20160601 00:00:01.613 160.230
我想以设定的时间间隔过滤掉“出价”列中的唯一值
例如:2016-06-01 00:00:00 - 00:15:00、2016-06-01 00:15:00 - 00:30:00...
结果将是一个新的数据框(将过滤后的值与其日期时间保持一致)。这是我到目前为止的代码:
#Convert Date column to index with seconds as base
df['Date'] = pd.DatetimeIndex(df['Date'])
df['Date'] = df['Date'].astype('datetime64[s]')
df.set_index('Date', inplace=True)
#Create new DataFrame with filtered values
ts = pd.DataFrame(df.loc['2016-06-01'].between_time('00:00', '00:30')['Bid'].unique())
使用上述方法,我在创建新 DataFrame 的过程中丢失了过滤值的 [Dates] (datetime),而且我必须手动输入每个日期和时间间隔,这是不切实际的。
Output:
0
0 160.225
1 160.226
2 160.230
3 160.231
4 160.232
5 160.228
6 160.227
理想情况下,我正在寻找一种操作,我可以将时间间隔设置为 timedelta,并一次对整个文件(大约 8Gb)进行操作,创建一个新的 DataFrame,其中包含集合中唯一值的 Date 和 Bid 列间隔。像这样
Date Bid
0 20160601 00:00:00.020 160.225
1 20160601 00:00:00.136 160.226
2 20160601 00:00:00.327 160.230
3 20160601 00:00:01.606 160.231
...
805 20160601 00:15:00.606 159.127
PS。我也尝试过使用pd.rolling()
&pd.resample()
方法apply(lambda x: function
(例如pd['Bid'].unique()
),但它永远无法削减它,也许更擅长它的人可以尝试。