Поиск значений столбца на основе нескольких условий и подстановочных знаковPython

Программы на Python
Anonymous
Поиск значений столбца на основе нескольких условий и подстановочных знаков

Сообщение Anonymous »

У меня есть фрейм данных:

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

df = pl.DataFrame({'Col1': ['a', 'a', 'a', 'b', 'b', 'b', 'b', 'aa', 'aa', 'aa']
, 'Col2': ['c', 'd', 'e', 'c', 'd', 'e', 'f', 'd', 'e', 'f']
, 'Col3': ['i', 'i', 'j', 'T', 'j', 'k', 'l', 'j', 'k', 'l']
, 'Col4': ['m', 'n', 'o', 'p', 'r', 's', 'z', 'r', 's', 'z']})
shape: (10, 4)
┌──────┬──────┬──────┬──────┐
│ Col1 ┆ Col2 ┆ Col3 ┆ Col4 │
│ ---  ┆ ---  ┆ ---  ┆ ---  │
│ str  ┆ str  ┆ str  ┆ str  │
╞══════╪══════╪══════╪══════╡
│ a    ┆ c    ┆ i    ┆ m    │
│ a    ┆ d    ┆ i    ┆ n    │
│ a    ┆ e    ┆ j    ┆ o    │
│ b    ┆ c    ┆ T    ┆ p    │
│ …    ┆ …    ┆ …    ┆ …    │
│ b    ┆ f    ┆ l    ┆ z    │
│ aa   ┆ d    ┆ j    ┆ r    │
│ aa   ┆ e    ┆ k    ┆ s    │
│ aa   ┆ f    ┆ l    ┆ z    │
└──────┴──────┴──────┴──────┘
У меня также есть критерии поиска для вычисления выходного столбца. Примерно так:

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

┌──────┬──────┬──────┬──────┬────────┐
│ Col1 ┆ Col2 ┆ Col3 ┆ Col4 ┆ Output │
╞══════╪══════╪══════╪══════╪════════╡
│ a    ┆ *    ┆ *    ┆ n    ┆ out2   │
│ a    ┆ *    ┆ *    ┆ *    ┆ out1   │
│ b    ┆ *    ┆ T  ┆ *    ┆ out2   │
│ aa   ┆ d    ┆ *    ┆ *    ┆ out3   │
│ aa   ┆ e    ┆ *    ┆ *    ┆ out4   │
│ aa   ┆ f    ┆ *    ┆ *    ┆ out5   │
│ *    ┆ *    ┆ *    ┆ *    ┆ Unknown│
└──────┴──────┴──────┴──────┴────────┘
Последнее условие по сути является оператором Else.
Вывод будет примерно таким:

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

shape: (10, 5)
┌──────┬──────┬──────┬──────┬─────────┐
│ Col1 ┆ Col2 ┆ Col3 ┆ Col4 ┆ Output  │
│ ---  ┆ ---  ┆ ---  ┆ ---  ┆ ---     │
│ str  ┆ str  ┆ str  ┆ str  ┆ str     │
╞══════╪══════╪══════╪══════╪═════════╡
│ a    ┆ c    ┆ i    ┆ m    ┆ out1    │
│ a    ┆ d    ┆ i    ┆ n    ┆ out2    │
│ a    ┆ e    ┆ j    ┆ o    ┆ out1    │
│ b    ┆ c    ┆ T    ┆ p    ┆ Unknown │
│ b    ┆ d    ┆ j    ┆ r    ┆ out2    │
│ b    ┆ e    ┆ k    ┆ s    ┆ out2    │
│ b    ┆ f    ┆ l    ┆ z    ┆ out2    │
│ aa   ┆ d    ┆ j    ┆ r    ┆ out3    │
│ aa   ┆ e    ┆ k    ┆ s    ┆ out4    │
│ aa   ┆ f    ┆ l    ┆ z    ┆ out5    │
└──────┴──────┴──────┴──────┴─────────┘
Я могу написать это как каскадный оператор типа pl.when(...).then(...).otherwise(...), но как число случаев становится больше, это может быть довольно неловко. Есть ли лучший способ выполнить этот тип поиска? Я подумывал об объединении, но не уверен, что это возможно с помощью подстановочных знаков.

Подробнее здесь: https://stackoverflow.com/questions/787 ... wild-cards

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