Tôi gặp phải vấn đề sau và nảy ra ý tưởng giải quyết nó nhưng không thành công: Tôi có cuộc gọi DAX và đặt dữ liệu cho mỗi ngày giao dịch trong một tháng. Sau khi chuyển đổi và một số tính toán, tôi có DataFrame sau: DaxOpt . Mục tiêu bây giờ là loại bỏ mọi hàng (quyền chọn mua hoặc quyền chọn bán) không có cặp tiền tệ tương ứng. Theo cặp, ý tôi là quyền chọn mua và bán có cùng "EXERCISE_PRICE" và "TAU", trong đó "TAU" = thời gian hết hạn tính bằng năm. Hộp màu đỏ trong hình là ví dụ về một cặp. Vì vậy, hoặc bạn có một DataFrame chỉ chứa các cặp hoặc bạn có hai DataFrames với các tùy chọn Gọi và Đặt trong đó các hàng là các cặp tương ứng của chúng.
Ý tưởng của tôi là tạo hai DataFrame mới, một DataFrame chỉ chứa tùy chọn cuộc gọi và cái còn lại chứa tùy chọn đặt, sắp xếp chúng theo "TAU" và "EXERCISE_PRICE" và xử lý chúng bằng hàm pandas isin để loại bỏ loại tiền tệ tương ứng Một cuộc gọi hoặc đặt tùy chọn trên cặp.
DaxOptCall = DaxOpt[DaxOpt.CALL_PUT_FLAG == 'C']
DaxOptPut = DaxOpt[DaxOpt.CALL_PUT_FLAG == 'P']
Vấn đề là DaxOptCall và DaxOptPut có kích thước khác nhau nên hàm isin không được áp dụng. Tôi đang cố gắng tìm ra phương pháp hiệu quả nhất vì dữ liệu tôi đang sử dụng hiện chỉ là một phần nhỏ của dữ liệu thực.
Bất kỳ trợ giúp hoặc ý tưởng đều được đánh giá cao.
Xem liệu điều này có phù hợp với bạn không:
Sau khi chia df thành hai df thông qua tùy chọn CALL/PUT, hãy chuyển đổi các cột dành riêng cho từng cặp của bạn thành các cột được lập chỉ mục:
# Giả sử các cột duy nhất của bạn là TAU và EXERCISE_PRICE
df_call = df_call.set_index(["EXERCISE_PRICE", "TAU"])
df_put = df_put.set_index(["EXERCISE_PRICE", "TAU"])
Tiếp theo, lấy giao điểm của các chỉ số, điều này sẽ trả về một đối tượng MultiIndex của gấu trúc
mtx = df_call.index.intersection(df_put.index)
Sau đó sử dụng đối tượng mtx để trích xuất các phần tử công khai từ dfs
df_call.loc[mtx]
df_put.loc[mtx]
Nếu bạn muốn chúng ở cùng một df, bạn có thể hợp nhất chúng và đặt lại chỉ mục về cột ban đầu.
Tôi là một lập trình viên xuất sắc, rất giỏi!