Tôi đang đọc một số dữ liệu thời tiết tự động từ web. Các quan sát xảy ra cứ sau 5 phút và được tổng hợp thành các tệp hàng tháng cho mỗi trạm thời tiết. Khi tôi đã phân tích cú pháp một tệp, DataFrame trông giống như thế này:
Sta Precip1hr Precip5min Temp DewPnt WindSpd WindDir AtmPress
Date
2001-01-01 00:00:00 KPDX 0 0 4 3 0 0 30.31
2001-01-01 00:05:00 KPDX 0 0 4 3 0 0 30.30
2001-01-01 00:10:00 KPDX 0 0 4 3 4 80 30.30
2001-01-01 00:15:00 KPDX 0 0 3 2 5 90 30.30
2001-01-01 00:20:00 KPDX 0 0 3 2 10 110 30.28
Vấn đề tôi gặp phải là đôi khi một nhà khoa học quay lại và sửa chữa các quan sát - không phải bằng cách chỉnh sửa các hàng sai, mà bằng cách nối một hàng trùng lặp vào cuối tệp. Ví dụ đơn giản về trường hợp như vậy được minh họa dưới đây:
import pandas
import datetime
startdate = datetime.datetime(2001, 1, 1, 0, 0)
enddate = datetime.datetime(2001, 1, 1, 5, 0)
index = pandas.DatetimeIndex(start=startdate, end=enddate, freq='H')
data1 = {'A' : range(6), 'B' : range(6)}
data2 = {'A' : [20, -30, 40], 'B' : [-50, 60, -70]}
df1 = pandas.DataFrame(data=data1, index=index)
df2 = pandas.DataFrame(data=data2, index=index[:3])
df3 = df2.append(df1)
df3
A B
2001-01-01 00:00:00 20 -50
2001-01-01 01:00:00 -30 60
2001-01-01 02:00:00 40 -70
2001-01-01 03:00:00 3 3
2001-01-01 04:00:00 4 4
2001-01-01 05:00:00 5 5
2001-01-01 00:00:00 0 0
2001-01-01 01:00:00 1 1
2001-01-01 02:00:00 2 2
Và vì vậy tôi cần phải df3
trở thành đồng đều:
A B
2001-01-01 00:00:00 0 0
2001-01-01 01:00:00 1 1
2001-01-01 02:00:00 2 2
2001-01-01 03:00:00 3 3
2001-01-01 04:00:00 4 4
2001-01-01 05:00:00 5 5
Tôi nghĩ rằng việc thêm một cột số hàng ( df3['rownum'] = range(df3.shape[0])
) sẽ giúp tôi chọn ra hàng dưới cùng cho bất kỳ giá trị nào của giá trị DatetimeIndex
, nhưng tôi bị mắc kẹt trong việc tìm ra các câu lệnh group_by
hoặc pivot
(hoặc ???) để thực hiện công việc đó.