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

    if class == fc обновить столбец значения с помощью fc_Cap
    < li>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
code> max_BKT из исходного df.
Надеюсь, это имеет смысл... я новичок в pandas.

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

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

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

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

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

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