Python Pandas проверяет значение, если оно существует из одного DataFrame в другой DataFrame

1

У меня есть файл Excel, в котором я использую каждый столбцы как DataFrame. Вот 5 DataFrames, которые я использую - (я буду добавлять столбец номера строки для более легкого разъяснения в моем вопросе. Он не включен в исходный файл):

row_no   svc_no   i_status   caller_id   f_status   remarks
1        11111    WO         22222       WO
2        22222    WO         11111       WO

3        33333    WO         n/a         FA
4        NULL     FA         33333       WO

5        444444   WO         55555       WO
6        55555    WO         new_num     WO

Мне нужно поставить значение в колонке remarks после того, как я удовлетворю условиям. В этом случае есть три сценария, в которых каждый сценарий имеет разные условия.

Примечание. Строки данных могут отличаться, но для моего примера я помещаю их последовательно

Условия сценария 1 (строки 1 и 2):

  • svc_no не равно caller_id
  • svc_no не является NULL
  • caller_id не является n/a
  • svc_no находится в caller_id и наоборот
  • i_status и f_status - WO

Условия сценария 2 (строки 3 и 4):

  • svc_no не равно caller_id
  • svc_no находится в caller_id и наоборот
  • Значение в svc_no сопоставляется с n/a, а значение его пары в caller_id сопоставляется с NULL
  • Если i_status и f_status - FA, если значение NULL или n/a

Сценарий 3 условия (строки 5 и 6):

  • svc_no не равно caller_id
  • svc_no - 6 числовых символов
  • caller_id - new_num
  • i_status и f_status - WO
  • svc_no находится в caller_id и наоборот

Теперь позвольте сказать, что я удовлетворяю условиям для каждого сценария, я должен будет указать обозначенное значение в примечаниях. Поэтому мой желаемый результат:

row_no   svc_no   i_status   caller_id   f_status   remarks
1        11111    WO         22222       WO         S1 Transpose
2        22222    WO         11111       WO         S1 Transpose

3        33333    WO         n/a         FA         S2 Transpose
4        NULL     FA         33333       WO         S2 Transpose

5        444444   WO         55555       WO         S3 Transpose
6        55555    WO         new_num     WO         S3 Transpose

Моя проблема в том, что хотя мой код работает и следит за условиями, результат не является точным. Вот мой код:

# Scenario 1

df.loc[(df['svc_no'] != df['caller_id']) &
       (df['svc_no'].isin(df['caller_id'])) &
       (df['caller_id'].isin(df['svc_no'])) &
       (df['svc_no'] != 'NULL') &
       (df['caller_id'] != 'n/a') &
       (df['i_status'] == 'WO') &
       (df['f_status'] == 'WO'), ['remarks']] = 'S1 Transpose'

# Scenario 2
# NULL svc_no
df.loc[(df['svc_no'] == 'NULL') &
       (df['caller_id'] !='n/a') &
       (df['svc_no'].isin(df['caller_id'])) &
       (df['caller_id'].isin(df['svc_no'])) &
       (df['i_status'] == 'FA') &
       (df['f_status'] == 'WO')['remarks']] = 'S2 Transpose'

# n/a in caller_id
df.loc[(df['svc_no'] != 'NULL') &
       (df['caller_id'] =='n/a') &
       (df['svc_no'].isin(df['caller_id'])) &
       (df['caller_id'].isin(df['svc_no'])) &
       (df['i_status'] == 'WO') &
       (df['f_status'] == 'FA')['remarks']] = 'S2 Transpose'

# Scenario 3
df.loc[(c_merge['svc_no'] != 'NULL') &
       (df['svc_no'].isin(c_merge['caller_id'])) &
       (df['caller_id'].isin(c_merge['svc_no'])) &
       (df['i_status'] == 'WO') &
       (df['caller_id'] != c_merge['svc_no']) &
       (df['f_status'] == 'WO') &
       (df['caller_id'] == 'new_num', ['remarks']] = s3_wo_wo

Результат, который у меня есть:

row_no   svc_no   i_status   caller_id   f_status   remarks
1        11111    WO         22222       WO         S1 Transpose
2        22222    WO         11111       WO         S1 Transpose

3        33333    WO         n/a         FA         S1 Transpose
4        NULL     FA         33333       WO         S1 Transpose

5        444444   WO         55555       WO         
6        55555    WO         new_num     WO         S3 Transpose

S1 Transpose также вводит данные в S2 Transpose и S3 Transpose only помещает ввод S3 Transpose only в один ряд.

Есть ли способ, которым я могу группировать 2 строки, которые применяют условия? Или есть способ для моего кода, в котором они будут применяться к конкретным затронутым этим строкам?

Теги:
pandas

1 ответ

0

Я ответил на это, выполнив: я использовал df.loc для каждой следующей строки.

Я смог получить свой результат без группировки двух строк, содержащих транспонированное значение.

В строке (df['svc_no']isint(df['caller_id'])), я обнаруживаю, существует ли значение в svc_no в caller_id и создается другой df.loc для другой другой строки

Сценарий 1:

df.loc[(c_merge['svc_no'] != 'NULL') & /
      (df['i_status'] == 'WO') & /
      (df['caller_id'] != 'n/a') & /
      (df['f_status'] == 'WO') & /
      (df['svc_no'] != df['caller_id']) & /
      (df['svc_no'].isin(df['caller_id'])), ['remarks']] = 'S1 Transpose'

df.loc[(c_merge['svc_no'] != 'NULL') & /
      (df['i_status'] == 'WO') & /
      (df['caller_id'] != 'n/a') & /
      (df['f_status'] == 'WO') & /
      (df['svc_no'] != df['caller_id']) & /
      (df['caller_id'].isin(df['svc_no'])), ['remarks']] = 'S1 Transpose'

Я применил бы это к другим сценариям, поскольку я думаю, что это путь к нему.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню