Переиндексация редких Pandas столбцов DataFrame - PullRequest
0 голосов
/ 15 апреля 2020

Я хотел бы переиндексировать столбцы моего разреженного фрейма данных, чтобы добавленные новые столбцы также имели разреженный тип данных.

Будет много новых столбцов, занимающих много память.

Фрейм данных имеет несколько индексов в виде столбцов, а новый индекс также многоиндексирован, только с большим количеством столбцов, чем раньше.

Вот пример:

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)), но я бы хотел избежать полного промежуточного результата с таким большим количеством ненужных данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...