Поскольку фрейм данных огромен, фильтрация обходится слишком дорого. Однако мне, похоже, не хватает оперативной памяти (32 ГБ). В настоящее время я конвертирую df в «куски» следующим образом:
Код: Выделить всё
h = df.height # number of rows
chunk_size = 1_000_000 # split each rows
b = (np.linspace(1, math.ceil(h/chunk_size), num=math.ceil(h/chunk_size)))
new_col = (np.repeat(b, chunk_size))[:-( chunk_size - (h%chunk_size))]
df = df.with_columns(polars.lit(new_col).alias('new_index'))
m = df.partition_by(by="new_index", as_dict=True)
del df
gc.collect()
my_dict = {}
for key, value in list(m.items()):
my_dict.update(
{
uas: frame.select(polars.exclude("unique_col")).to_dicts()[0]
for uas, frame in
(
value
.drop("new_index")
.unique(subset=["unique_col"], keep='last')
.partition_by(by=["unique_col"],
as_dict=True)
).items()
}
)
m.pop(key)
Подробнее здесь: https://stackoverflow.com/questions/751 ... o-much-ram