У меня есть df с несколькими строками. Мне нужно проверить конкретное значение в значении столбца и вернуть, если есть соответствие. У меня есть набор правил, приоритет которых зависит от порядка.
Мой образец df:
file_name fil_name
0 02qbhIPSYiHmV_sample_file-MR-job1 02qbhIPSYiHmV
1 02qbhIPSYiHmV_sample_file-MC-job2 02qbhIPSYiHmV
2 02qbhIPSYiHmV_sample_file-job3 02qbhIPSYiHmV
Для меня MC
имеет первостепенное значение. Если MC
присутствует в значении file_name
, возьмите эту запись. Если MC
нет, возьмите запись, в которой есть MR
. Если нет MC
или MR
, то просто возьмите то, что есть в моем случае, только третий ряд.
Я придумал такую функцию,
def choose_best_record(df_t):
file_names = df_t['file_name']
for idx, fn in enumerate(file_names):
lw_fn = fn.lower()
if '-mc-' in lw_fn:
get_mc_row = df_t.iloc[idx:idx+1]
print("Returning MC row")
return get_mc_row
else:
if '-mr-' in lw_fn:
get_mr_row = df_t.iloc[idx:idx+1]
print('Returning MR row')
return get_mr_row
else:
normal_row = df_t.iloc[idx:idx+1]
print('Reutrning normal row')
return normal_row
Однако это ведет себя не так, как я хочу. Мне нужен MC
(индекс строки 1), вместо этого он возвращает строку MR
.
Если у меня есть строки в фрейме данных в таком порядке, как ...file-MR-job1
, ...file-MR-job1
, ....file-MR-job1
, тогда он работает. Как я могу изменить свою функцию, чтобы она работала, в зависимости от того, как мне нужен мой выход?
@ObjectJosh Я думаю, что неправильная часть - это когда нет порядка приоритета, то есть MC
-> MR
-> нормально функция не работает. не уверен, помогает ли это понять. пожалуйста, дайте мне знать!
Я еще не совсем понял, что не так, но в качестве комментария вы можете сделать свой код немного более аккуратным, объединив
else:
иif
вelif
и, соответственно, удалить.