Skip to content

Commit 827c854

Browse files
committed
Merge pull request #9583 from cottrell/to_coo_patch
Test added and patch to fix python-version-dependent issues when len ro...
2 parents e3d1b0e + 9b1a696 commit 827c854

File tree

2 files changed

+15
-5
lines changed

2 files changed

+15
-5
lines changed

pandas/sparse/scipy_sparse.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from pandas.core.series import Series
99
import itertools
1010
import numpy as np
11-
from pandas.compat import OrderedDict
11+
from pandas.compat import OrderedDict, lmap
1212
from pandas.tools.util import cartesian_product
1313

1414

@@ -54,7 +54,7 @@ def get_indexers(levels):
5454
def _get_label_to_i_dict(labels, sort_labels=False):
5555
""" Return OrderedDict of unique labels to number.
5656
Optionally sort by label. """
57-
labels = Index(map(tuple, labels)).unique().tolist() # squish
57+
labels = Index(lmap(tuple, labels)).unique().tolist() # squish
5858
if sort_labels:
5959
labels = sorted(list(labels))
6060
d = OrderedDict((k, i) for i, k in enumerate(labels))
@@ -73,7 +73,8 @@ def robust_get_level_values(i):
7373
labels_to_i = _get_label_to_i_dict(
7474
ilabels, sort_labels=sort_labels)
7575
labels_to_i = Series(labels_to_i)
76-
labels_to_i.index = MultiIndex.from_tuples(labels_to_i.index)
76+
if len(subset) > 1:
77+
labels_to_i.index = MultiIndex.from_tuples(labels_to_i.index)
7778
labels_to_i.index.names = [index.names[i] for i in subset]
7879
labels_to_i.name = 'value'
7980
return(labels_to_i)

pandas/sparse/tests/test_sparse.py

+11-2
Original file line numberDiff line numberDiff line change
@@ -783,8 +783,10 @@ def setUp(self):
783783
([3.0, 1.0, 2.0], ([0, 1, 1], [0, 2, 3])), shape=(3, 4)))
784784
self.coo_matrices.append(scipy.sparse.coo_matrix(
785785
([3.0, 1.0, 2.0], ([1, 0, 0], [0, 2, 3])), shape=(3, 4)))
786-
self.ils = [[(1, 2), (1, 1), (2, 1)], [(1, 1), (1, 2), (2, 1)]]
787-
self.jls = [[('a', 0), ('a', 1), ('b', 0), ('b', 1)]]
786+
self.coo_matrices.append(scipy.sparse.coo_matrix(
787+
([3.0, 1.0, 2.0], ([0, 1, 1], [0, 0, 1])), shape=(3, 2)))
788+
self.ils = [[(1, 2), (1, 1), (2, 1)], [(1, 1), (1, 2), (2, 1)], [(1, 2, 'a'), (1, 1, 'b'), (2, 1, 'b')]]
789+
self.jls = [[('a', 0), ('a', 1), ('b', 0), ('b', 1)], [0, 1]]
788790

789791
def test_to_coo_text_names_integer_row_levels_nosort(self):
790792
ss = self.sparse_series[0]
@@ -799,6 +801,13 @@ def test_to_coo_text_names_integer_row_levels_sort(self):
799801
result = (self.coo_matrices[1], self.ils[1], self.jls[0])
800802
self._run_test(ss, kwargs, result)
801803

804+
def test_to_coo_text_names_text_row_levels_nosort_col_level_single(self):
805+
ss = self.sparse_series[0]
806+
kwargs = {'row_levels': ['A', 'B', 'C'],
807+
'column_levels': ['D'], 'sort_labels': False}
808+
result = (self.coo_matrices[2], self.ils[2], self.jls[1])
809+
self._run_test(ss, kwargs, result)
810+
802811
def test_to_coo_integer_names_integer_row_levels_nosort(self):
803812
ss = self.sparse_series[1]
804813
kwargs = {'row_levels': [3, 0], 'column_levels': [1, 2]}

0 commit comments

Comments
 (0)