Полярные значения: используйте значения столбца для ссылки на другой столбец в выражении When/then.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Полярные значения: используйте значения столбца для ссылки на другой столбец в выражении When/then.

Сообщение Anonymous »

У меня есть фрейм данных Polars, в котором я хотел бы получить новый столбец, используя выражение «когда/то». Значения нового столбца должны быть взяты из другого столбца в том же кадре данных. Однако столбец, из которого берутся значения, отличается от строки к строке.
Вот простой пример:
df = pl.DataFrame(
{
"frequency": [0.5, None, None, None],
"frequency_ref": ["a", "z", "a", "a"],
"a": [1, 2, 3, 4],
"z": [5, 6, 7, 8],
}
)

Результирующий фрейм данных должен выглядеть следующим образом:
res = pl.DataFrame(
{
"frequency": [0.5, None, None, None],
"frequency_ref": ["a", "z", "a", "a"],
"a": [1, 2, 3, 4],
"z": [5, 6, 7, 8],
"res": [0.5, 6, 3, 4]
}
)

Я пытался создать динамическую ссылку, используя вложенный pl.col:
# Case 1) Fixed value is given
fixed_freq_condition = pl.col("frequency").is_not_null() & pl.col("frequency").is_not_nan()
# Case 2) Reference to distribution data is given
ref_freq_condition = pl.col("frequency_ref").is_not_null()

# Apply the conditions to calculate res
df = df.with_columns(
pl.when(fixed_freq_condition)
.then(pl.col("frequency"))
.when(ref_freq_condition)
.then(
pl.col(pl.col("frequency_ref"))
)
.otherwise(0.0)
.alias("res"),
)

Что не удается из-за TypeError: неверный ввод для «col». Ожидаемый "str" ​​или "DataType", получено "Expr".
Что работает (но только как промежуточное решение), так это явное перечисление всех возможных значений столбца в очень длинное выражение «когда/то». Это далеко не оптимально, поскольку имена столбцов могут измениться в будущем и привести к большому повторению кода.
df = df.with_columns(
pl.when(fixed_freq_condition)
.then(pl.col("frequency"))
.when(pl.col("frequency_ref") == "a")
.then(pl.col("a"))
# ... more entries
.when(pl.col("frequency_ref") == "z")
.then(pl.col("z"))
.otherwise(0.0)
.alias("res"),
)


Подробнее здесь: https://stackoverflow.com/questions/784 ... expression
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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