У меня есть фрейм данных 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
Полярные значения: используйте значения столбца для ссылки на другой столбец в выражении When/then. ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение