我想将数据帧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
.....
答案 0 :(得分:3)
使用DataFrame.asfreq
和DatetimeIndex
一起使用,因此首先将列转换为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