python中基于分钟的datetime列中每n分钟采样一次

python中基于分钟的datetime列中每n分钟采样一次,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,如何选择数据帧中每5分钟一行?如果缺少第5分钟,则第4分钟或第3分钟就可以了 我不想要平均值或任何累计值 我试过: df.groupby(pd.TimeGrouper('5Min'))['AUDUSD'].mean() df.resample('5min', how=np.var).head() 两者都没有产生预期的结果 我的意见: DATETIME AUDUSD DATETIME 2019-06-07 0

如何选择数据帧中每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

这对我来说很有效,但我先用了,因为我不知道你用的是什么方法:

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


首先,我们需要了解您的最后一分钟离最近的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

那么,这两个人的产量是多少呢?仍然不确切。但是,比我能做到的要好得多。谢谢。。