@@ -9,12 +9,13 @@ def crossover(
99 data : Union [PdDataFrame , PlDataFrame ],
1010 first_column : str ,
1111 second_column : str ,
12- result_column = "crossover" ,
12+ result_column = "crossover" ,
1313 data_points : int = None ,
1414 strict : bool = True ,
1515) -> Union [PdDataFrame , PlDataFrame ]:
1616 """
17- Identifies crossover points where `first_column` crosses above or below `second_column`.
17+ Identifies crossover points where `first_column` crosses above
18+ or below `second_column`.
1819
1920 Args:
2021 data: Pandas or Polars DataFrame
@@ -32,15 +33,18 @@ def crossover(
3233
3334 # Restrict data to the last `data_points` rows if specified
3435 if data_points is not None :
35- data = data .tail (data_points ) if isinstance (data , PdDataFrame ) else data .slice (- data_points )
36+ data = data .tail (data_points ) if isinstance (data , PdDataFrame ) \
37+ else data .slice (- data_points )
3638
3739 # Pandas Implementation
3840 if isinstance (data , PdDataFrame ):
3941 col1 , col2 = data [first_column ], data [second_column ]
4042 prev_col1 , prev_col2 = col1 .shift (1 ), col2 .shift (1 )
4143
4244 if strict :
43- crossover_mask = ((prev_col1 < prev_col2 ) & (col1 > col2 )) | ((prev_col1 > prev_col2 ) & (col1 < col2 ))
45+ crossover_mask = (
46+ (prev_col1 < prev_col2 )
47+ & (col1 > col2 )) | ((prev_col1 > prev_col2 ) & (col1 < col2 ))
4448 else :
4549 crossover_mask = (col1 > col2 ) | (col1 < col2 )
4650
@@ -52,12 +56,14 @@ def crossover(
5256 prev_col1 , prev_col2 = col1 .shift (1 ), col2 .shift (1 )
5357
5458 if strict :
55- crossover_mask = ((prev_col1 < prev_col2 ) & (col1 > col2 )) | ((prev_col1 > prev_col2 ) & (col1 < col2 ))
59+ crossover_mask = ((prev_col1 < prev_col2 ) & (col1 > col2 )) | \
60+ ((prev_col1 > prev_col2 ) & (col1 < col2 ))
5661 else :
5762 crossover_mask = (col1 > col2 ) | (col1 < col2 )
5863
5964 # Convert boolean mask to 1s and 0s
60- data = data .with_columns (pl .when (crossover_mask ).then (1 ).otherwise (0 ).alias (result_column ))
65+ data = data .with_columns (pl .when (crossover_mask ).then (1 )
66+ .otherwise (0 ).alias (result_column ))
6167
6268 return data
6369
0 commit comments