Python: số giờ lăn bánh của các biến phân loại
Tôi có khung dữ liệu gấu trúc với các cột ['DateTime', 'Variable']và tôi đang cố gắng tính số lần luân phiên trong giờ qua cho mỗi cột Variable. Trục tư duy có thể được sử dụng bằng cách nào đó.
Dữ liệu mẫu
DateTime Variable
8/24/19 3:30PM A
8/24/19 3:32PM A
8/24/19 3:36PM B
8/24/19 3:50PM C
8/25/19 2:50PM A
Sản lượng mong đợi
DateTime A B C
8/24/19 3:30PM 1 0 0
8/24/19 3:32PM 2 0 0
8/24/19 3:36PM 2 1 0
8/24/19 3:50PM 2 1 1
8/25/19 2:50PM 1 0 0
Các biến mới có thể được thêm vào hoặc xóa bỏ, vì vậy tôi muốn có một giải pháp động.
Trả lời
Bạn có thể trên thực tế bắt đầu với pivot, hoặc làm nó bằng tay với groupby.unstack.
Sau đó, bạn đang tìm df.rollingcách tạo cửa sổ cuốn có thể tổng hợp nhiều chức năng. Để các cửa sổ được tạo với lịch hẹn giờ (trong trường hợp này là 1 giờ), bạn cần đảm bảo chỉ mục thuộc datetimeloại.
df['DateTime'] = pd.to_datetime(df['DateTime'])
out = (
df
.groupby(['DateTime', 'Variable']) # set the columns as index
.size() # aggregate by row count
.unstack(fill_value=0) # move 'Variable' index level to columns
.sort_index()
)
out = out.rolling('1h').sum()
Đầu ra
Variable A B C
DateTime
2019-08-24 15:30:00 1.0 0.0 0.0
2019-08-24 15:32:00 2.0 0.0 0.0
2019-08-24 15:36:00 2.0 1.0 0.0
2019-08-24 15:50:00 2.0 1.0 1.0
2019-08-25 14:50:00 1.0 0.0 0.0
Coi df là tập dữ liệu của bạn: new_df = df [df ['Variable'] == 'A']. Resample ('H'). Count ()
Bạn có thể tạo khung dữ liệu mới như sau: final_df = pd.DataFrame ({'DateTime': new_df.index, 'A': new_df.values})
Tương tự, lấy số lượng cho từng danh mục của cột Biến và cố gắng nối nó với final_df bằng vòng lặp.
Tôi đã không thử nó nhưng hy vọng nó sẽ hoạt động.