Пожалуйста, рассмотрите ряд:
series = pd.Series(np.random.normal(0, 1, 100))
Вот скользящее среднее df, которое содержит скользящие средние этого ряда, где каждый столбец соответствует скользящим средним, используя одно значение в window = [2, 5, 10, 15, 20, 25]
ma_df = pd.DataFrame()
for i in window:
ma_df['ma'+ str(i)] = series.rolling(window = i).mean()
df = pd.concat([ma_df, series], axis =1)
df.tail()
ma2 ma5 ma10 ma15 ma20 ma25 series
95 -0.66 -0.15 0.15 -0.02 -0.09 -0.16 0.11
96 0.28 -0.09 0.11 0.02 -0.05 -0.14 0.46
97 0.76 -0.09 0.28 0.08 -0.04 -0.07 1.06
98 1.10 0.27 0.32 0.19 0.02 -0.01 1.13
99 1.03 0.74 0.39 0.32 0.13 0.01 0.94
Вопрос: Я хочу создать столбец df['relative_positions']
, который принимает разные значения в зависимости от относительной величины разных столбцов df.Например, df['positions']
= 0, если выполняются следующие условия:
df['relative_positions'] [(df.series > df.ma5) & (df.series > df.ma10) & (df.series < df.ma15) & (df.series > df.ma25) & (df.ma10 > df.ma25) & ....] = 0
или df['positions']
= 1, если:
df['relative_positions'] [(df.series < df.ma5) & (df.series< df.ma10) & (df.ma25 < df.ma15) & (df.ma10 < df.ma25) & (df.series < df.ma25) & ....] = 1
или df['positions']
= 2, если:
df['relative_positions'] [(df.ma20 < df.ma5) & (df.series > df.ma20) & (df.ma20 < df.ma15) & (df.ma25 < df.series) & (df.series < df.ma5) & ....] = 2
и т. Д. И т. П. В каждом наборе условий все столбцы должны сравниваться со всеми остальными столбцами, причем как <
, так и >
приметы.Короче говоря, df['relative_positions']
принимает разные значения (неважно, что) в зависимости от величины столбцов относительно друг друга (больше или меньше).
Проблема: Как вы можетеПонимаете, написание этих условий вручную практически невозможно.Можно ли как-нибудь автоматически заполнить такие списки перестановок условий?
Извините, если вопрос неопределенный.Будем рады все прояснить.