Выберите столбец на основе значения другого столбца Polars PythonPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Выберите столбец на основе значения другого столбца Polars Python

Сообщение Anonymous »

У меня есть файл df с десятью столбцами и еще один столбец, значения которого являются частичным именем десяти столбцов. Вот аналогичный пример:

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

import polars as pl
df = pl.DataFrame({
"ID"     :["A"  ,"B"  ,"C"  ] ,
"A Left" :["W1" ,"W2" ,"W3" ] ,
"A Right":["P1" ,"P2" ,"P3" ] ,
"B Left" :["G1" ,"G2" ,"G3" ] ,
"B Right":["Y1" ,"Y2" ,"Y3" ] ,
"C Left" :["M1" ,"M2" ,"M3" ] ,
"C Right":["K1" ,"K2" ,"K3" ] ,
})
df
shape: (3, 7)
┌─────┬────────┬─────────┬────────┬─────────┬────────┬─────────┐
│ ID  ┆ A Left ┆ A Right ┆ B Left ┆ B Right ┆ C Left ┆ C Right │
│ --- ┆ ---    ┆ ---     ┆ ---    ┆ ---     ┆ ---    ┆ ---     │
│ str ┆ str    ┆ str     ┆ str    ┆ str     ┆ str    ┆ str     │
╞═════╪════════╪═════════╪════════╪═════════╪════════╪═════════╡
│ A   ┆ W1     ┆ P1      ┆ G1     ┆ Y1      ┆ M1     ┆ K1      │
│ B   ┆ W2     ┆ P2      ┆ G2     ┆ Y2      ┆ M2     ┆ K2      │
│ C   ┆ W3     ┆ P3      ┆ G3     ┆ Y3      ┆ M3     ┆ K3      │
└─────┴────────┴─────────┴────────┴─────────┴────────┴─────────┘
Я хочу добавить столбец, значение которого будет выбрано из других столбцов на основе идентификатора столбца, как показано ниже:

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

shape: (3, 8)
┌─────┬────────┬─────────┬────────┬─────────┬────────┬─────────┬───────┐
│ ID  ┆ A Left ┆ A Right ┆ B Left ┆ B Right ┆ C Left ┆ C Right ┆ value │
│ --- ┆ ---    ┆ ---     ┆ ---    ┆ ---     ┆ ---    ┆ ---     ┆ ---   │
│ str ┆ str    ┆ str     ┆ str    ┆ str     ┆ str    ┆ str     ┆ str   │
╞═════╪════════╪═════════╪════════╪═════════╪════════╪═════════╪═══════╡
│ A   ┆ W1     ┆ P1      ┆ G1     ┆ Y1      ┆ M1     ┆ K1      ┆ W1-P1 │
│ B   ┆ W2     ┆ P2      ┆ G2     ┆ Y2      ┆ M2     ┆ K2      ┆ G2-Y2 │
│ C   ┆ W3     ┆ P3      ┆ G3     ┆ Y3      ┆ M3     ┆ K3      ┆ M3-K3 │
└─────┴────────┴─────────┴────────┴─────────┴────────┴─────────┴───────┘
Я получил этот результат, используя unpivot:

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

df.join( df.unpivot(index='ID').with_columns(
pl.when(pl.col("ID") == pl.col("variable").str.slice(0,1)).then(pl.col("value"))
).select("ID" , "value").drop_nulls().group_by("ID").agg(pl.col('value').str.join("-"))
,on='ID').sort("ID")
Однако мне нужно избегать разворота, поскольку у меня есть две группы по десять столбцов рядом с другими 50 столбцами.
Я пробовал использовать pl.col( ) и Polars.selectors, но мне не удалось получить результат.

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

import polars.selectors as cs
df.with_columns(
cs.by_name(
( pl.concat_str([pl.col('ID') , " Left"] ) )
).alias("value")
)
TypeError: invalid name: 

Подробнее здесь: [url]https://stackoverflow.com/questions/77311182/select-column-based-on-the-value-of-another-column-polars-python[/url]
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

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

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