Tôi có dataframe sau:gấu trúc - nhận được hầu hết giá trị gần đây của một cột cụ thể lập chỉ mục theo cột khác (nhận được giá trị tối đa của một cột cụ thể lập chỉ mục theo cột khác)
obj_id data_date value
0 4 2011-11-01 59500
1 2 2011-10-01 35200
2 4 2010-07-31 24860
3 1 2009-07-28 15860
4 2 2008-10-15 200200
Tôi muốn có được một tập hợp con của dữ liệu này để tôi chỉ có mới nhất (lớn nhất 'data_date'
) 'value'
cho mỗi 'obj_id'
.
Tôi đã tấn công cùng nhau một giải pháp, nhưng nó cảm thấy bẩn. Tôi đã tự hỏi nếu có ai có một cách tốt hơn. Tôi chắc rằng tôi phải thiếu một số cách dễ dàng để làm điều đó thông qua gấu trúc.
Phương pháp của tôi chủ yếu là nhóm, sắp xếp, lấy, và tái tổ hợp như sau:
row_arr = []
for grp, grp_df in df.groupby('obj_id'):
row_arr.append(dfg.sort('data_date', ascending = False)[:1].values[0])
df_new = DataFrame(row_arr, columns = ('obj_id', 'data_date', 'value'))
tôi đã thử nghiệm tốc độ trên dataframe với 24735 hàng, chia thành 16 nhóm (btw: bộ dữ liệu từ planethunter.org) và có 12,5 ms (argmax) vs 17,5 ms (loại) như kết quả của% timeit. Vì vậy, cả hai giải pháp khá nhanh :-) và tập dữ liệu của tôi dường như quá nhỏ ;-) – Maximilian