Nov-16-2023, 05:28 PM
Here is what I've currently got:
DataFrame 1:
Value Trend
0 100 Downtrend
1 99 Downtrend
2 90 Downtrend
3 79 Downtrend
4 62 Downtrend
DataFrame 2:
Value Trend
0 62 Uptrend
1 94 Uptrend
DataFrame 3:
Value Trend
0 94 Downtrend
1 88 Downtrend
2 75 Downtrend
DataFrame 4:
Value Trend
0 75 Uptrend
1 80 Uptrend
2 72 Uptrend
3 74 Uptrend
4 87 Uptrend
DataFrame 5:
Value Trend
0 87 Downtrend
1 84 Downtrend
2 90 Downtrend
The errors start at dataframe 3, where it should have gone down to 72 because there was no 10% upmove to invalidate it. Then it should have went from 72 to 90 as an uptrend.
import pandas as pd def detect_trend_change(data, threshold=10): trend_dataframes = [] trend = None trend_sum = 0 trend_points = [] for i in range(1, len(data)): change_percent = 100 * (data[i] - data[i-1]) / data[i-1] current_trend = 'Uptrend' if change_percent > 0 else 'Downtrend' if trend is None: trend = current_trend trend_points.append(data[i-1]) if current_trend == trend: trend_sum += abs(change_percent) trend_points.append(data[i]) else: if abs(trend_sum) >= threshold: df = pd.DataFrame({'Value': trend_points, 'Trend': trend}) trend_dataframes.append(df) trend_points = [data[i-1], data[i]] trend_sum = abs(change_percent) trend = current_trend else: trend_sum += abs(change_percent) trend_points.append(data[i]) # Add the last trend if trend_points: df = pd.DataFrame({'Value': trend_points, 'Trend': trend}) trend_dataframes.append(df) return trend_dataframes # Provided dataset dataset = [100, 99, 90, 79, 62, 94, 88, 75, 80, 72, 74, 87, 84, 90] # Call the function with the dataset resulting_dataframes = detect_trend_change(dataset) # Print the resulting dataframes for idx, df in enumerate(resulting_dataframes, 1): print(f"DataFrame {idx}:\n{df}\n")However, it's coming out as:
DataFrame 1:
Value Trend
0 100 Downtrend
1 99 Downtrend
2 90 Downtrend
3 79 Downtrend
4 62 Downtrend
DataFrame 2:
Value Trend
0 62 Uptrend
1 94 Uptrend
DataFrame 3:
Value Trend
0 94 Downtrend
1 88 Downtrend
2 75 Downtrend
DataFrame 4:
Value Trend
0 75 Uptrend
1 80 Uptrend
2 72 Uptrend
3 74 Uptrend
4 87 Uptrend
DataFrame 5:
Value Trend
0 87 Downtrend
1 84 Downtrend
2 90 Downtrend
The errors start at dataframe 3, where it should have gone down to 72 because there was no 10% upmove to invalidate it. Then it should have went from 72 to 90 as an uptrend.