У меня есть большой фрейм данных Polars, который мне нужно развернуть. Этот кадр данных содержит множество нулевых значений (по крайней мере половину). Я хочу удалить нули, отменив поворот кадра данных. Я уже пытался сначала развернуть фрейм данных, а затем отфильтровать его с помощью drop_nulls() или подобных подходов. Однако это требует слишком больших затрат памяти (на машине с объемом оперативной памяти около 1 ТБ).
Есть ли способ фильтровать набор данных уже в процессе разворота?
Любая помощь приветствуется!
Пример данных.
# in reality, this dataset has about 160k rows and columns
# (square matrix), and is about 100GB
df = {
"A": [None, 2, 3],
"B": [None, None, 2],
"C": [None, None, None],
"names": ["A", "B", "C"]
}
df = pl.DataFrame(df)
df.unpivot(index = "names", variable_name = "names_2", value_name = "distance")
Вывод.
shape: (9, 3)
┌───────┬─────────┬──────────┐
│ names ┆ names_2 ┆ distance │
│ --- ┆ --- ┆ --- │
│ str ┆ str ┆ i64 │
╞═══════╪═════════╪══════════╡
│ A ┆ A ┆ null │
│ B ┆ A ┆ null │
│ C ┆ A ┆ null │
│ A ┆ B ┆ 2 │
│ B ┆ B ┆ null │
│ C ┆ B ┆ null │
│ A ┆ C ┆ 3 │
│ B ┆ C ┆ 2 │
│ C ┆ C ┆ null │
└───────┴─────────┴──────────┘
Затем это можно было бы отфильтровать (например, с помощью df = df.drop_nulls()), но я хотел бы получить желаемый результат непосредственно из unpivot.
Ожидаемый результат.
shape: (3, 3)
┌───────┬─────────┬──────────┐
│ names ┆ names_2 ┆ distance │
│ --- ┆ --- ┆ --- │
│ str ┆ str ┆ i64 │
╞═══════╪═════════╪══════════╡
│ A ┆ B ┆ 2 │
│ A ┆ C ┆ 3 │
│ B ┆ C ┆ 2 │
└───────┴─────────┴──────────┘
Подробнее здесь: https://stackoverflow.com/questions/788 ... -dataframe