每隔5分钟将一个DataFrame复制到另一个

时间:2019-05-17 08:24:30

标签: python pandas

我想将数据帧df每隔5分钟而不是1分钟复制到df2中。

如何通过特定采访提取行?

>>> df = pd.read_csv('sample.txt', names=['Time', 'Index', 'Volume'], delim_whitespace=True)
>>> df.head(20)
                Time   Index  Volume
0   2019/05/16-09:15  27830    2031
1   2019/05/16-09:16  27815     995
2   2019/05/16-09:17  27829     961
3   2019/05/16-09:18  27848     663
4   2019/05/16-09:19  27873     869
5   2019/05/16-09:20  27847     854
6   2019/05/16-09:21  27828     784
7   2019/05/16-09:22  27813     676
8   2019/05/16-09:23  27828     700
9   2019/05/16-09:24  27849     665
10  2019/05/16-09:25  27851     487
11  2019/05/16-09:26  27859     451
12  2019/05/16-09:27  27874     548
13  2019/05/16-09:28  27898    1105
14  2019/05/16-09:29  27907     832
15  2019/05/16-09:30  27897    1470

我期望的数据框

>>> df2
                Time   Index  Volume
0   2019/05/16-09:15  27830    2031
5   2019/05/16-09:20  27847     854
10  2019/05/16-09:25  27851     487
15  2019/05/16-09:30  27897    1470
.....

2 个答案:

答案 0 :(得分:3)

使用DataFrame.asfreqDatetimeIndex一起使用,因此首先将列转换为datetime,然后再转换为DataFrame.set_index

df['Time'] = pd.to_datetime(df['Time'])
df = df.set_index('Time').asfreq('5T').reset_index()
print (df)
                 Time  Index  Volume
0 2019-05-16 09:15:00  27830    2031
1 2019-05-16 09:20:00  27847     854
2 2019-05-16 09:25:00  27851     487
3 2019-05-16 09:30:00  27897    1470

如果日期时间的格式不能更改:

df.index = pd.to_datetime(df['Time'])
df = df.asfreq('5T').reset_index(drop=True)
print (df)
               Time  Index  Volume
0  2019/05/16-09:15  27830    2031
1  2019/05/16-09:20  27847     854
2  2019/05/16-09:25  27851     487
3  2019/05/16-09:30  27897    1470

答案 1 :(得分:1)

我认为您正在寻找一个groupby语句,有一种方便的方法可以将日期时间索引为.resample

 df.set_index('Time').resample('5T').last()

产生:

Out[156]:
0   2019/05/16-09:15  27830    2031
5   2019/05/16-09:20  27847     854
10  2019/05/16-09:25  27851     487
15  2019/05/16-09:30  27897    1470