После того как я отменил поворот кадра данных Polars, как я могу вернуть его в исходную форму без добавления индекса? ⇐ Python
После того как я отменил поворот кадра данных Polars, как я могу вернуть его в исходную форму без добавления индекса?
import polars as pl
df = pl.DataFrame({
'A': range(1,4),
'B': range(1,4),
'C': range(1,4),
'D': range(1,4)
})
print(df)
shape: (3, 4)
┌─────┬─────┬─────┬─────┐
│ A ┆ B ┆ C ┆ D │
│ --- ┆ --- ┆ --- ┆ --- │
│ i64 ┆ i64 ┆ i64 ┆ i64 │
╞═════╪═════╪═════╪═════╡
│ 1 ┆ 1 ┆ 1 ┆ 1 │
│ 2 ┆ 2 ┆ 2 ┆ 2 │
│ 3 ┆ 3 ┆ 3 ┆ 3 │
└─────┴─────┴─────┴─────┘
df_long = df.unpivot(
variable_name="recipe",
value_name="revenue")
print(df_long)
shape: (12, 2)
┌────────┬─────────┐
│ recipe ┆ revenue │
│ --- ┆ --- │
│ str ┆ i64 │
╞════════╪═════════╡
│ A ┆ 1 │
│ A ┆ 2 │
│ A ┆ 3 │
│ B ┆ 1 │
│ B ┆ 2 │
│ … ┆ … │
│ C ┆ 2 │
│ C ┆ 3 │
│ D ┆ 1 │
│ D ┆ 2 │
│ D ┆ 3 │
└────────┴─────────┘
Кажется, мне нужно добавить индекс, чтобы вернуть df_long обратно в исходную форму df? Нет ли способа повернуть фрейм данных Polars без добавления индекса?
df_long = df_long.with_columns(index=pl.col("revenue").cum_count().over("recipe"))
df_long.pivot(
on='recipe',
index='index',
values='revenue',
aggregate_function='first'
)
shape: (3, 5)
┌───────┬─────┬─────┬─────┬─────┐
│ index ┆ A ┆ B ┆ C ┆ D │
│ --- ┆ --- ┆ --- ┆ --- ┆ --- │
│ u32 ┆ i64 ┆ i64 ┆ i64 ┆ i64 │
╞═══════╪═════╪═════╪═════╪═════╡
│ 1 ┆ 1 ┆ 1 ┆ 1 ┆ 1 │
│ 2 ┆ 2 ┆ 2 ┆ 2 ┆ 2 │
│ 3 ┆ 3 ┆ 3 ┆ 3 ┆ 3 │
└───────┴─────┴─────┴─────┴─────┘
В R я могу выполнить эквивалент разворота и поворота без индексации, и искал ту же функциональность в Python.
df_pandas = df.to_pandas()
library(tidyverse)
library(reticulate)
df_long
pivot_longer(
everything(),
names_to = 'recipe',
values_to = 'value'
)
df_long |>
pivot_wider(
names_from='recipe',
values_from='value'
) |>
unnest(cols = c(A,B,C,D))
Подробнее здесь: https://stackoverflow.com/questions/781 ... ginal-form
import polars as pl
df = pl.DataFrame({
'A': range(1,4),
'B': range(1,4),
'C': range(1,4),
'D': range(1,4)
})
print(df)
shape: (3, 4)
┌─────┬─────┬─────┬─────┐
│ A ┆ B ┆ C ┆ D │
│ --- ┆ --- ┆ --- ┆ --- │
│ i64 ┆ i64 ┆ i64 ┆ i64 │
╞═════╪═════╪═════╪═════╡
│ 1 ┆ 1 ┆ 1 ┆ 1 │
│ 2 ┆ 2 ┆ 2 ┆ 2 │
│ 3 ┆ 3 ┆ 3 ┆ 3 │
└─────┴─────┴─────┴─────┘
df_long = df.unpivot(
variable_name="recipe",
value_name="revenue")
print(df_long)
shape: (12, 2)
┌────────┬─────────┐
│ recipe ┆ revenue │
│ --- ┆ --- │
│ str ┆ i64 │
╞════════╪═════════╡
│ A ┆ 1 │
│ A ┆ 2 │
│ A ┆ 3 │
│ B ┆ 1 │
│ B ┆ 2 │
│ … ┆ … │
│ C ┆ 2 │
│ C ┆ 3 │
│ D ┆ 1 │
│ D ┆ 2 │
│ D ┆ 3 │
└────────┴─────────┘
Кажется, мне нужно добавить индекс, чтобы вернуть df_long обратно в исходную форму df? Нет ли способа повернуть фрейм данных Polars без добавления индекса?
df_long = df_long.with_columns(index=pl.col("revenue").cum_count().over("recipe"))
df_long.pivot(
on='recipe',
index='index',
values='revenue',
aggregate_function='first'
)
shape: (3, 5)
┌───────┬─────┬─────┬─────┬─────┐
│ index ┆ A ┆ B ┆ C ┆ D │
│ --- ┆ --- ┆ --- ┆ --- ┆ --- │
│ u32 ┆ i64 ┆ i64 ┆ i64 ┆ i64 │
╞═══════╪═════╪═════╪═════╪═════╡
│ 1 ┆ 1 ┆ 1 ┆ 1 ┆ 1 │
│ 2 ┆ 2 ┆ 2 ┆ 2 ┆ 2 │
│ 3 ┆ 3 ┆ 3 ┆ 3 ┆ 3 │
└───────┴─────┴─────┴─────┴─────┘
В R я могу выполнить эквивалент разворота и поворота без индексации, и искал ту же функциональность в Python.
df_pandas = df.to_pandas()
library(tidyverse)
library(reticulate)
df_long
pivot_longer(
everything(),
names_to = 'recipe',
values_to = 'value'
)
df_long |>
pivot_wider(
names_from='recipe',
values_from='value'
) |>
unnest(cols = c(A,B,C,D))
Подробнее здесь: https://stackoverflow.com/questions/781 ... ginal-form
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение