정보를 복사하고 다음 변수가 변경 될 때까지 팬더 DataFrames가 작동하는 방식을 이해하려고합니다 ... 특히 아래의 경우 Share_Amt_To_Buy를 내 신호 또는 Signal_Diff가 1에서 0으로 전환됩니까?python pandas 데이터 프레임, 값 조작
Share_Amt_To_Buy에서 .cumsum()을 사용하면 값을 낮추고 정확히 무엇을하고 싶은지 축적합니다.
내 목표는 신호가 0에서 1로 변경 될 때 Share_Amt_To_Buy가 계산되어 Signal이 0으로 전환 될 때까지 복사된다는 것입니다. 그런 다음 Signal이 1로 다시 바뀌면 Share_Amt_To_Buy가 해당 시점을 기준으로 다시 계산되기를 원합니다.
희망 사항은 의미가 있습니다. 알려 주시기 바랍니다. (위치)와 0 = 무역 (또는 위치) 1 = 무역
Signal_Diff은 :
Signal Signal_Diff Share_Amt_To_Buy (Correctly) Share_Amt_To_Buy (Currently)
0 0 0 0
0 0 0 0
0 0 0 0
1 1 100 100
1 0 100 100
1 0 100 100
0 -1 0 100
0 0 0 100
1 1 180 280
1 0 180 280
하면 알 수 있듯이, 내 신호는 0에서 1로 대체하고,이 기능은 다음 수단 0에서 1 I 사용한 신호에 변화가 본
012,351,641를 계산하는 예를 들어 다음의 경우 열의 Share_Amt_To_Buy '가 계산된다portfolio['Signal_Diff'] = portfolio['Signal'].diff().fillna(0.0)
를 다음과 같이 계산
initial_cap = 100000.0
portfolio['close'] = my stock's closing prices as a float
portfolio['Share_Amt'] = np.where(variables['Signal']== 1.0, np.round(initial_cap/portfolio['close'] * 0.25 * portfolio['Signal']), 0.0).cumsum()
portfolio['Share_Amt_To_Buy'] = (portfolio['Share_Amt']*portfolio['Signal'])
for 루프의 첫 번째 옵션이 마음에 든다. 내 신호 시리즈를 검사하고 내 share_amt 시리즈에서 계산 된 값을 채우는 for 루프를 사용하여 3 번째 시리즈를 만들고이 행마다 반복됩니까? –
예, for 루프를 사용하여 어떤 값이 변경되었는지 확인한 다음이를 사용하여 share_amt 시리즈를 다시 계산합니다. 모든 인덱스의 모든 값을 반복하고 다시 계산할 때 영원히 걸리므로 목록을 신속하게 반복 한 다음 변경된 인덱스 만 확인하는 것이 더 빠릅니다. –
예를 들어 한 열의 모든 값을 검사하여 값이 특정 값과 같은지 확인하려면 10,000 열 데이터 프레임에 대해 1.8 ~ 18.8 밀리 초가 걸립니다 (따라서 2 배, 상한은 모두 참인 경우 낮은 값은 모두 false 인 경우), 값을 제거하는 데 2가 소요됩니다.35 ms-664 ms (모든 거짓 인 경우 낮은 값), 다시 계산할 때마다 100 μs가 걸리지 만 각 값을 다시 정의하면 인덱스 당 120 μs가 소요되므로 값이 2/3 이하라고 가정 할 때 더 빠릅니다 (~ 5 ms 값이 변경되지 않으면 모든 변경 사항이있는 경우 1.6 초, 모든 사항을 확인하는 경우 1 초). –