У меня есть 2 фрейма данных pyspark в моей среде:
df
y1 y2 y3 y4 y5 y6 y7 y8 y9 y10 y11 y12
12 rf 22 34 32 54 54 21 43 544 545 332
12 ed 23 34 23 53 23 23 22 434 342 432
.. .. .. .. .. .. .. .. .. ... ... ...
df_filtered
y1 y2 y3 y4 y5 y6 y7 y8 y9 y10 y11 y12
12 rf 35 34 32 54 54 21 43 544 545 332
12 ed 99 34 23 53 23 23 22 434 342 432
.. .. .. .. .. .. .. .. .. ... ... ...
y3 - это столбец отметки времени, и моя проблема:выберите метку времени, т. е. y3 из df_filtered для данного y1.извлечь 10 значений до этой отметки времени из df.рассчитать квантильные диапазоны для y7 до y12.проверьте, находятся ли значения df_filtered в пределах квантильных диапазонов.любое значение выходит за пределы этой строки в df_filtered как выброс, иначе реальный.
ожидаемый результат
y1 y2 y3 y4 y5 y6 y7 y8 y9 y10 y11 y12 status
12 rf 22 34 32 54 54 21 43 544 545 332 real
12 ed 23 34 23 53 23 23 22 434 342 432 outlier
.. .. .. .. .. .. .. .. .. ... ... ... ......
, если я рассматриваю данные в формате pandas dataframe.работает следующий цикл:
low = 0.25
high = 0.75
list1 = []
for i in range(len(df_filtered)):
x = df[(df['y3'] >= df_filtered.loc[df_filtered.index[i],'y3']-10) & (df['y3'] < df_filtered.loc[df_filtered.index[i],'y3']) & (df['y1'] == df_filtered.loc[df_filtered.index[i],'y1'])]
y = x.quantile([low,high])
#y2 is automatically removed as y2 was a text column hence quatile not calculated
y = y.drop(['y1','y3','y4','y5','y6'],axis=1)
for j in y.columns.values:
t1 = []
t = "real" if y[j][low] <= df_filtered.loc[df_filtered.index[i],j] <= y[j][high] else "outlier"
t1.append(t)
t2 = 'outlier' if 'outlier' in t1 else 'real'
list1.append(t2)
df_filtered['status'] = list1