Мне нужно просмотреть каждую строку в кадре данных, глядя на столбец с именем «source_IP_address», и посмотреть на предыдущие 100 строк, чтобы я мог найти, есть ли строки с таким же «source_IP_address» и где другой столбецзаявляет «ошибка аутентификации».
Я написал некоторый код, который делает это, так как я не мог использовать Pandas, скользящий по двум столбцам. Проблема в том, что это не очень быстро, и я хочу знать, есть ли лучший способ сделать это?
функция, чтобы найти в предыдущем окне n строк, количество соответствующих значений оси, вместе с числомзначений атрибута в столбце атрибута
def check_window_for_match(df_w, window_size, axis_col, attr_col, attr_var):
l = []
n_rows = df_w.shape[0]
for i in range(n_rows):
# create a temp dataframe with the previous n rows including current row
temp_df = df_w.iloc[i-(window_size-1):i+1]
#print(temp_df.shape)
# assign the current 'B' value as the axis variable
current_value = df_w[axis_col].iloc[i]
#print(current_value)
#print(temp_df)
# given the temp dataframe of previous window of n_rows, check axis matches against fails
l_temp = temp_df.loc[(temp_df[axis_col] == current_value) & (temp_df[attr_col] == attr_var)].shape[0]
l.append(l_temp)
return l
например
df_test = pd.DataFrame({'B': [0, 1, 2, np.nan, 4, 6, 7, 8, 10, 8, 7], 'C': [2, 10, 'fail', np.nan, 6, 7, 8, 'fail', 8, 'fail', 9]})
df_test
matches_list = check_window_for_match(df_test, window_size=3, axis_col='B', attr_col='C', attr_var='fail')
вывод: [0, 0, 1, 0, 0, 0, 0, 1, 0, 2, 0]
Я хочу знать, правильный ли мой код и является ли это лучшим способом сделать это, или есть лучшая альтернатива.