Я хотел бы переиндексировать столбцы моего разреженного фрейма данных, чтобы добавленные новые столбцы также имели разреженный тип данных.
Будет много новых столбцов, занимающих много память.
Фрейм данных имеет несколько индексов в виде столбцов, а новый индекс также многоиндексирован, только с большим количеством столбцов, чем раньше.
Вот пример:
original = pd.DataFrame({
('x', 0): [0., 1., 2.],
('y', 1): [2., 3., 0.]
).astype(pd.SparseDtype("float", 0.0))
x y
0 1
0 0.0 2.0
1 1.0 3.0
2 2.0 0.0
new_index = pd.MultiIndex.from_product([['x', 'y'], [0, 1]])
result = original.reindex(new_index, axis='columns', fill_value=0.0)
x y
0 1 0 1
0 0.0 0.0 0.0 2.0
1 1.0 0.0 0.0 3.0
2 2.0 0.0 0.0 0.0
result.info()
Похоже, что информация указывает на то, что новые столбцы имеют тип float64
и не разрежены.
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3 entries, 0 to 2
Data columns (total 4 columns):
(x, 0) -3 non-null Sparse[float64, 0.0]
(x, 1) -3 non-null float64
(y, 0) -3 non-null float64
(y, 1) -3 non-null Sparse[float64, 0.0]
dtypes: Sparse[float64, 0.0](2), float64(2)
memory usage: 224.0 bytes
Можно ли заставить их быть разреженными с самого начала? Я, конечно, мог бы сделать result.astype(pd.SparseDtype("float", 0.0))
, но я бы хотел избежать полного промежуточного результата с таким большим количеством ненужных данных.