Tôi có một DataFrame
có chứa giá trị cổ phiếu.Cột mới dựa trên lựa chọn có điều kiện từ các giá trị của 2 cột khác trong một khung dữ liệu Pandas
Nó trông như thế này:
>>>Data Open High Low Close Volume Adj Close Date
2013-07-08 76.91 77.81 76.85 77.04 5106200 77.04
Khi tôi cố gắng tạo ra một cột mới có điều kiện như sau câu lệnh if:
Data['Test'] =Data['Close'] if Data['Close'] > Data['Open'] else Data['Open']
tôi nhận được lỗi sau:
Traceback (most recent call last):
File "<pyshell#116>", line 1, in <module>
Data[1]['Test'] =Data[1]['Close'] if Data[1]['Close'] > Data[1]['Open'] else Data[1]['Open']
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
Sau đó, tôi đã sử dụng a.all()
:
Data[1]['Test'] =Data[1]['Close'] if all(Data[1]['Close'] > Data[1]['Open']) else Data[1]['Open']
Kết quả là toàn bộ cột ['Open']
được chọn. Tôi đã không nhận được điều kiện mà tôi muốn, đó là chọn mỗi lần giá trị lớn nhất giữa các cột ['Open']
và ['Close']
.
Mọi trợ giúp đều được đánh giá cao.
Cảm ơn.
nơi tôi có '' df ['B'] '' bạn có thể đặt một vô hướng (ví dụ 'Đóng'), mặc dù bạn thực sự nên làm điều này trong một cột khác (ví dụ cột bạn chọn từ, '' df [' A '] '' không nhất thiết phải giống như mặt nạ '' df [' A ']> df [' B '] '', nếu không bạn sẽ nhận được cột dấu phẩy/chuỗi hỗn hợp, thường không hữu ích (và không Bạn cũng có thể có một cột khác, nơi tôi có '' df ['B'] '' làm giá trị thay thế (và gấu trúc sẽ căn chỉnh nó với cột chọn) .Tuy nhiên điều này là chính xác tương đương với: '' df .loc [df ['A']> df ['B'], 'A'] = df ['B'] '' – Jeff