Anonymous
Условно повторять значения в следующих строках на основе значений столбца
Сообщение
Anonymous » 03 ноя 2025, 13:23
Я хотел бы обновить значения столбцов «e» и «f» таким образом, чтобы, если столбец «diff» имеет значение «-1» или «1», затем присвоить значения столбцов «b» и «c» соответственно столбцу «e» и «f» для текущей строки, а также последующим строкам, пока значение столбца «diff» не изменится на «-1» или «1».
Ниже приведены входные данные.
/>
Код: Выделить всё
import polars as pl
df = pl.LazyFrame({
"a" : [0,1,2,3,4,5,6,7,8,9],
"b" : [234,34,43,6,343,76,67,23,878,12],
"c" : [934,23,1,34,2,87,23,698,65,56],
"d" : [1,1,0,0,0,0,1,1,1,1]
})
df = df.with_columns(pl.col('d').diff().alias('diff')).fill_null(0)
df.collect()
Код: Выделить всё
shape: (10, 5)
┌─────┬─────┬─────┬─────┬──────┐
│ a ┆ b ┆ c ┆ d ┆ diff │
│ --- ┆ --- ┆ --- ┆ --- ┆ --- │
│ i64 ┆ i64 ┆ i64 ┆ i64 ┆ i64 │
╞═════╪═════╪═════╪═════╪══════╡
│ 0 ┆ 234 ┆ 934 ┆ 1 ┆ 0 │
│ 1 ┆ 34 ┆ 23 ┆ 1 ┆ 0 │
│ 2 ┆ 43 ┆ 1 ┆ 0 ┆ -1 │
│ 3 ┆ 6 ┆ 34 ┆ 0 ┆ 0 │
│ 4 ┆ 343 ┆ 2 ┆ 0 ┆ 0 │
│ 5 ┆ 76 ┆ 87 ┆ 0 ┆ 0 │
│ 6 ┆ 67 ┆ 23 ┆ 1 ┆ 1 │
│ 7 ┆ 23 ┆ 698 ┆ 1 ┆ 0 │
│ 8 ┆ 878 ┆ 65 ┆ 1 ┆ 0 │
│ 9 ┆ 12 ┆ 56 ┆ 1 ┆ 0 │
└─────┴─────┴─────┴─────┴──────┘
Я ищу такой результат.
Код: Выделить всё
final_df = df= pl.LazyFrame({
"a" : [0,1,2,3,4,5,6,7,8,9],
"b" : [234,34,43,6,343,76,67,23,878,12],
"c" : [934,23,1,34,2,87,23,698,65,56],
"d" : [1,1,0,0,0,0,1,1,1,1],
"e" : [234,34,43,43,43,43,67,67,67,67],
"f" : [934,23,1,1,1,1,23,23,23,23]
})
final_df.collect()
Код: Выделить всё
shape: (10, 6)
┌─────┬─────┬─────┬─────┬─────┬─────┐
│ a ┆ b ┆ c ┆ d ┆ e ┆ f │
│ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- │
│ i64 ┆ i64 ┆ i64 ┆ i64 ┆ i64 ┆ i64 │
╞═════╪═════╪═════╪═════╪═════╪═════╡
│ 0 ┆ 234 ┆ 934 ┆ 1 ┆ 234 ┆ 934 │
│ 1 ┆ 34 ┆ 23 ┆ 1 ┆ 34 ┆ 23 │
│ 2 ┆ 43 ┆ 1 ┆ 0 ┆ 43 ┆ 1 │
│ 3 ┆ 6 ┆ 34 ┆ 0 ┆ 43 ┆ 1 │
│ 4 ┆ 343 ┆ 2 ┆ 0 ┆ 43 ┆ 1 │
│ 5 ┆ 76 ┆ 87 ┆ 0 ┆ 43 ┆ 1 │
│ 6 ┆ 67 ┆ 23 ┆ 1 ┆ 67 ┆ 23 │
│ 7 ┆ 23 ┆ 698 ┆ 1 ┆ 67 ┆ 23 │
│ 8 ┆ 878 ┆ 65 ┆ 1 ┆ 67 ┆ 23 │
│ 9 ┆ 12 ┆ 56 ┆ 1 ┆ 67 ┆ 23 │
└─────┴─────┴─────┴─────┴─────┴─────┘
Как лучше всего добиться этого с помощью API Polars?
Следующий вопрос «Повторять строки в кадре данных Polars на основе значения столбца», к сожалению, в моем случае не помогает.>
Подробнее здесь:
https://stackoverflow.com/questions/778 ... umn-values
1762165392
Anonymous
Я хотел бы обновить значения столбцов «e» и «f» таким образом, чтобы, если столбец «diff» имеет значение «-1» или «1», затем присвоить значения столбцов «b» и «c» соответственно столбцу «e» и «f» для текущей строки, а также последующим строкам, пока значение столбца «diff» не изменится на «-1» или «1». Ниже приведены входные данные. /> [code]import polars as pl df = pl.LazyFrame({ "a" : [0,1,2,3,4,5,6,7,8,9], "b" : [234,34,43,6,343,76,67,23,878,12], "c" : [934,23,1,34,2,87,23,698,65,56], "d" : [1,1,0,0,0,0,1,1,1,1] }) df = df.with_columns(pl.col('d').diff().alias('diff')).fill_null(0) df.collect() [/code] [code]shape: (10, 5) ┌─────┬─────┬─────┬─────┬──────┐ │ a ┆ b ┆ c ┆ d ┆ diff │ │ --- ┆ --- ┆ --- ┆ --- ┆ --- │ │ i64 ┆ i64 ┆ i64 ┆ i64 ┆ i64 │ ╞═════╪═════╪═════╪═════╪══════╡ │ 0 ┆ 234 ┆ 934 ┆ 1 ┆ 0 │ │ 1 ┆ 34 ┆ 23 ┆ 1 ┆ 0 │ │ 2 ┆ 43 ┆ 1 ┆ 0 ┆ -1 │ │ 3 ┆ 6 ┆ 34 ┆ 0 ┆ 0 │ │ 4 ┆ 343 ┆ 2 ┆ 0 ┆ 0 │ │ 5 ┆ 76 ┆ 87 ┆ 0 ┆ 0 │ │ 6 ┆ 67 ┆ 23 ┆ 1 ┆ 1 │ │ 7 ┆ 23 ┆ 698 ┆ 1 ┆ 0 │ │ 8 ┆ 878 ┆ 65 ┆ 1 ┆ 0 │ │ 9 ┆ 12 ┆ 56 ┆ 1 ┆ 0 │ └─────┴─────┴─────┴─────┴──────┘ [/code] Я ищу такой результат. [code]final_df = df= pl.LazyFrame({ "a" : [0,1,2,3,4,5,6,7,8,9], "b" : [234,34,43,6,343,76,67,23,878,12], "c" : [934,23,1,34,2,87,23,698,65,56], "d" : [1,1,0,0,0,0,1,1,1,1], "e" : [234,34,43,43,43,43,67,67,67,67], "f" : [934,23,1,1,1,1,23,23,23,23] }) final_df.collect() [/code] [code]shape: (10, 6) ┌─────┬─────┬─────┬─────┬─────┬─────┐ │ a ┆ b ┆ c ┆ d ┆ e ┆ f │ │ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- │ │ i64 ┆ i64 ┆ i64 ┆ i64 ┆ i64 ┆ i64 │ ╞═════╪═════╪═════╪═════╪═════╪═════╡ │ 0 ┆ 234 ┆ 934 ┆ 1 ┆ 234 ┆ 934 │ │ 1 ┆ 34 ┆ 23 ┆ 1 ┆ 34 ┆ 23 │ │ 2 ┆ 43 ┆ 1 ┆ 0 ┆ 43 ┆ 1 │ │ 3 ┆ 6 ┆ 34 ┆ 0 ┆ 43 ┆ 1 │ │ 4 ┆ 343 ┆ 2 ┆ 0 ┆ 43 ┆ 1 │ │ 5 ┆ 76 ┆ 87 ┆ 0 ┆ 43 ┆ 1 │ │ 6 ┆ 67 ┆ 23 ┆ 1 ┆ 67 ┆ 23 │ │ 7 ┆ 23 ┆ 698 ┆ 1 ┆ 67 ┆ 23 │ │ 8 ┆ 878 ┆ 65 ┆ 1 ┆ 67 ┆ 23 │ │ 9 ┆ 12 ┆ 56 ┆ 1 ┆ 67 ┆ 23 │ └─────┴─────┴─────┴─────┴─────┴─────┘ [/code] Как лучше всего добиться этого с помощью API Polars? Следующий вопрос «Повторять строки в кадре данных Polars на основе значения столбца», к сожалению, в моем случае не помогает.> Подробнее здесь: [url]https://stackoverflow.com/questions/77840113/conditionally-repeat-values-to-next-rows-based-on-column-values[/url]