Pandas Изменить значения кадра данных на основе переопределенияPython

Программы на Python
Ответить
Anonymous
 Pandas Изменить значения кадра данных на основе переопределения

Сообщение Anonymous »

У меня есть фрейм данных pandas, который выглядит примерно так.

Код: Выделить всё

orig |  dest |  type | class |  BKT   | BKT_order | value   | fc_Cap | sc_Cap
-----+-------+-------+-------+--------+-----------+---------+--------+---------
AMD |  TRY  |   SA  | fc    |  MA    |   1       |   12.04 |   20   |   50
AMD |  TRY  |   SA  | fc    |  TY    |   2       |   11.5  |   20   |   50
AMD |  TRY  |   SA  | fc    |  NY    |   3       |   17.7  |   20   |   50
AMD |  TRY  |   SA  | fc    |  MU    |   4       |   09.7  |   20   |   50
AMD |  TRY  |   PE  | fc    |  RE    |   1       |   09.7  |   20   |   50
AMD |  TRY  |   PE  | sc    |  EW    |   5       |   07.7  |   20   |   50
NCL |  MNK  |   PE  | sc    |  PO    |   2       |   08.7  |   20   |   50
NCL |  MNK  |   PE  | sc    |  TU    |   3       |   12.5  |   20   |   50
NCL |  MNK  |   PE  | sc    |  MA    |   1       |   16.7  |   20   |   50

Также у меня есть переопределенный Dataframe, который может выглядеть примерно так:

Код: Выделить всё

orig |  dest |  type |  max_BKT
-----+-------+-------+-----------
AMD |  TRY  |   SA  |  TY
NCL |  MNK  |   PE  |  PO
NCL |  AGZ  |   PE  |  PO

я хочу изменить исходный фрейм данных так, чтобы после сравнения исходного dest типа и BKT (с max_BKT ) , столбец value для любых строк, у которых BKT_order выше, чем max_BKT в переопределении DF, устанавливается либо на fc_Cap, либо на fc_Cap или sc_Cap в зависимости от значения класса.
Например, в приведенном выше сценарии
Поскольку Override DF устанавливает max_BKT< /code> как TY для AMD | ПОПРОБУЙТЕ | SA и порядок сегмента для TY равен 2 в исходном Df, мне нужно установить столбец value равным fc_Cap или sc_Capв зависимости от значения класса для всех строк, где BKT_order >= 2
Итак, в основном:
  • фильтр строки для комбинации исходного dest типа
  • Получить BKT_order max_BKT из исходного DF
    для каждой строки, соответствующей указанным выше критериям

    if class == fc обновить столбец значения с помощью fc_Cap
  • if class == sc обновить значение столбец с sc_Cap

Итак, наш оригинальный DF выглядит примерно так:

Код: Выделить всё

orig |  dest |  type | class |  BKT   | BKT_order | value   | fc_Cap | sc_Cap
-----+-------+-------+-------+--------+-----------+---------+--------+---------
AMD |  TRY  |   SA  | fc    |  MA    |   1       |   12.04 |   20   |   50
AMD |  TRY  |   SA  | fc    |  TY    |   2       |   20    |   20   |   50
AMD |  TRY  |   SA  | fc    |  NY    |   3       |   20    |   20   |   50
AMD |  TRY  |   SA  | fc    |  MU    |   4       |   20    |   20   |   50
AMD |  TRY  |   PE  | fc    |  RE    |   1       |   09.7  |   20   |   50
AMD |  TRY  |   PE  | sc    |  EW    |   5       |   07.7  |   20   |   50
NCL |  MNK  |   PE  | sc    |  PO    |   2       |   50    |   20   |   50
NCL |  MNK  |   PE  | sc    |  TU    |   3       |   50    |   20   |   50
NCL |  MNK  |   PE  | sc    |  MA    |   1       |   16.7  |   20   |   50

Надеюсь, это имеет смысл.
Я пробовал перебирать переопределение df и пытаться обрабатывать по одной строке за раз, но я застреваю, когда мне нужно выполнить обратный поиск, чтобы получить BKT_order max_BKT из исходного df.
Кроме того, я довольно новичок в пандах, поэтому, пожалуйста не против, если это глупый вопрос.

Подробнее здесь: https://stackoverflow.com/questions/793 ... n-override
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»