Skip to content

Commit 4201388

Browse files
committed
BUG: unstack fills True for boolean frame #1820
1 parent 6dace12 commit 4201388

File tree

2 files changed

+15
-0
lines changed

2 files changed

+15
-0
lines changed

pandas/core/reshape.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,8 @@ def get_new_values(self):
159159

160160
if issubclass(values.dtype.type, np.integer):
161161
new_values = new_values.astype(float)
162+
elif issubclass(values.dtype.type, np.bool_):
163+
new_values = new_values.astype(object)
162164

163165
new_values.fill(np.nan)
164166

@@ -171,6 +173,7 @@ def get_new_values(self):
171173
mask_chunk.flat[self.mask] = True
172174

173175
new_values = new_values.take(self.unique_groups, axis=0)
176+
174177
return new_values, new_mask
175178

176179
def get_new_columns(self):

pandas/tests/test_frame.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6253,6 +6253,18 @@ def test_stack_unstack(self):
62536253
assert_frame_equal(unstacked_cols.T, self.frame)
62546254
assert_frame_equal(unstacked_cols_df['bar'].T, self.frame)
62556255

6256+
def test_unstack_bool(self):
6257+
df = DataFrame([False, False],
6258+
index=MultiIndex.from_arrays([['a', 'b'], ['c', 'l']]),
6259+
columns=['col'])
6260+
rs = df.unstack()
6261+
xp = DataFrame(np.array([[False, np.nan], [np.nan, False]],
6262+
dtype=object),
6263+
index=['a', 'b'],
6264+
columns=MultiIndex.from_arrays([['col', 'col'],
6265+
['c', 'l']]))
6266+
assert_frame_equal(rs, xp)
6267+
62566268
def test_unstack_to_series(self):
62576269
# check reversibility
62586270
data = self.frame.unstack()

0 commit comments

Comments
 (0)