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 df3trở 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_byhoặc pivot(hoặc ???) để thực hiện công việc đó.