如何选择数据框中的第5分钟行?如果缺少第5分钟,那么第4或第3分钟就可以了。
我不希望有任何平均值
我尝试过:
df.groupby(pd.TimeGrouper('5Min'))['AUDUSD'].mean()
df.resample('5min', how=np.var).head()
均未取得理想的结果。
我的输入
DATETIME AUDUSD
DATETIME
2019-06-07 00:01:00 2019.06.07 00:01 0.69740
2019-06-07 00:02:00 2019.06.07 00:02 0.69742
2019-06-07 00:03:00 2019.06.07 00:03 0.69742
2019-06-07 00:04:00 2019.06.07 00:04 0.69742
2019-06-07 00:05:00 2019.06.07 00:05 0.69739
2019-06-07 00:06:00 2019.06.07 00:06 0.69740
2019-06-07 00:07:00 2019.06.07 00:07 0.69739
2019-06-07 00:08:00 2019.06.07 00:08 0.69740
2019-06-07 00:11:00 2019.06.07 00:11 0.69741
2019-06-07 00:12:00 2019.06.07 00:12 0.69741
2019-06-07 00:13:00 2019.06.07 00:13 0.69740
2019-06-07 00:14:00 2019.06.07 00:14 0.69740
2019-06-07 00:15:00 2019.06.07 00:15 0.69754
2019-06-07 00:16:00 2019.06.07 00:16 0.69749
2019-06-07 00:17:00 2019.06.07 00:17 0.69752
2019-06-07 00:18:00 2019.06.07 00:18 0.69753
2019-06-07 00:19:00 2019.06.07 00:19 0.69758
2019-06-07 00:20:00 2019.06.07 00:20 0.69763
2019-06-07 00:21:00 2019.06.07 00:21 0.69764
2019-06-07 00:23:00 2019.06.07 00:23 0.69765
2019-06-07 00:28:00 2019.06.07 00:28 0.69763
所需的输出:
DATETIME AUDUSD
DATETIME
2019-06-07 00:05:00 2019.06.07 00:05 0.69739
2019-06-07 00:10:00 2019.06.07 00:08 0.69740
2019-06-07 00:15:00 2019.06.07 00:15 0.69754
2019-06-07 00:20:00 2019.06.07 00:20 0.69763
2019-06-07 00:25:00 2019.06.07 00:23 0.69765
2019-06-07 00:30:00 2019.06.07 00:28 0.69763
答案 0 :(得分:2)
这对我有用,除了我首先使用,因为我不知道您使用什么方法:
df.set_index(pd.DatetimeIndex(df['DATETIME']))
df.set_index(pd.DatetimeIndex(df['DATETIME'])).resample("5T").agg('first')
Out[2649]:
DATETIME AUDUSD
DATETIME
2019-06-07 00:00:00 2019.06.07 00:01 0.69740
2019-06-07 00:05:00 2019.06.07 00:05 0.69739
2019-06-07 00:10:00 2019.06.07 00:11 0.69741
2019-06-07 00:15:00 2019.06.07 00:15 0.69754
2019-06-07 00:20:00 2019.06.07 00:20 0.69763
2019-06-07 00:25:00 2019.06.07 00:28 0.69763
答案 1 :(得分:0)
首先,我们需要找出最后一分钟与最近的30分钟有多远,然后我们可以为索引和数据框重新编制索引,同时添加自定义的分钟数:
def custom_round(x, base=30):
return int(base * round(float(x)/base))
mins_to_add = cumstom_round(df.index.minute[-1]) # assuming your index is a datetime.
#OR
mins_to_add = cumstom_round(df.DATETIME.minute[-1])
df2 = df.set_index('DATETIME').reindex(
pd.date_range(
df.DATETIME.min(),
df.DATETIME.max(), + pd.Timedelta(f'{mins_to_add}M') freq='1T', closed='left'
),
method='ffill'
)
print(df2.resample("5T").agg('first'))
DATETIME AUDUSD
DATETIME
2019-06-07 00:00:00 2019-06-07 00:01:00 0.69740
2019-06-07 00:05:00 2019-06-07 00:05:00 0.69739
2019-06-07 00:10:00 2019-06-07 00:08:00 0.69740
2019-06-07 00:15:00 2019-06-07 00:15:00 0.69754
2019-06-07 00:20:00 2019-06-07 00:20:00 0.69763
2019-06-07 00:25:00 2019-06-07 00:23:00 0.69765
2019-06-07 00:30:00 2019-06-07 00:28:00 0.69763