@@ -12328,6 +12328,25 @@ def test_unstack_dtypes(self):
12328
12328
expected = Series({'float64' : 2, 'object' : 2})
12329
12329
assert_series_equal(result, expected)
12330
12330
12331
+ # GH7405
12332
+ for c, d in (np.zeros(5), np.zeros(5)), \
12333
+ (np.arange(5, dtype='f8'), np.arange(5, 10, dtype='f8')):
12334
+
12335
+ df = DataFrame({'A': ['a']*5, 'C':c, 'D':d,
12336
+ 'B':pd.date_range('2012-01-01', periods=5)})
12337
+
12338
+ right = df.iloc[:3].copy(deep=True)
12339
+
12340
+ df = df.set_index(['A', 'B'])
12341
+ df['D'] = df['D'].astype('int64')
12342
+
12343
+ left = df.iloc[:3].unstack(0)
12344
+ right = right.set_index(['A', 'B']).unstack(0)
12345
+ right[('D', 'a')] = right[('D', 'a')].astype('int64')
12346
+
12347
+ self.assertEqual(left.shape, (3, 2))
12348
+ tm.assert_frame_equal(left, right)
12349
+
12331
12350
def test_unstack_non_unique_index_names(self):
12332
12351
idx = MultiIndex.from_tuples([('a', 'b'), ('c', 'd')],
12333
12352
names=['c1', 'c1'])
@@ -12385,6 +12404,93 @@ def verify(df):
12385
12404
for col in ['4th', '5th']:
12386
12405
verify(udf[col])
12387
12406
12407
+ # GH7403
12408
+ df = pd.DataFrame({'A': list('aaaabbbb'),'B':range(8), 'C':range(8)})
12409
+ df.iloc[3, 1] = np.NaN
12410
+ left = df.set_index(['A', 'B']).unstack(0)
12411
+
12412
+ vals = [[3, 0, 1, 2, nan, nan, nan, nan],
12413
+ [nan, nan, nan, nan, 4, 5, 6, 7]]
12414
+ vals = list(map(list, zip(*vals)))
12415
+ idx = Index([nan, 0, 1, 2, 4, 5, 6, 7], name='B')
12416
+ cols = MultiIndex(levels=[['C'], ['a', 'b']],
12417
+ labels=[[0, 0], [0, 1]],
12418
+ names=[None, 'A'])
12419
+
12420
+ right = DataFrame(vals, columns=cols, index=idx)
12421
+ assert_frame_equal(left, right)
12422
+
12423
+ df = DataFrame({'A': list('aaaabbbb'), 'B':list(range(4))*2,
12424
+ 'C':range(8)})
12425
+ df.iloc[2,1] = np.NaN
12426
+ left = df.set_index(['A', 'B']).unstack(0)
12427
+
12428
+ vals = [[2, nan], [0, 4], [1, 5], [nan, 6], [3, 7]]
12429
+ cols = MultiIndex(levels=[['C'], ['a', 'b']],
12430
+ labels=[[0, 0], [0, 1]],
12431
+ names=[None, 'A'])
12432
+ idx = Index([nan, 0, 1, 2, 3], name='B')
12433
+ right = DataFrame(vals, columns=cols, index=idx)
12434
+ assert_frame_equal(left, right)
12435
+
12436
+ df = pd.DataFrame({'A': list('aaaabbbb'),'B':list(range(4))*2,
12437
+ 'C':range(8)})
12438
+ df.iloc[3,1] = np.NaN
12439
+ left = df.set_index(['A', 'B']).unstack(0)
12440
+
12441
+ vals = [[3, nan], [0, 4], [1, 5], [2, 6], [nan, 7]]
12442
+ cols = MultiIndex(levels=[['C'], ['a', 'b']],
12443
+ labels=[[0, 0], [0, 1]],
12444
+ names=[None, 'A'])
12445
+ idx = Index([nan, 0, 1, 2, 3], name='B')
12446
+ right = DataFrame(vals, columns=cols, index=idx)
12447
+ assert_frame_equal(left, right)
12448
+
12449
+ # GH7401
12450
+ df = pd.DataFrame({'A': list('aaaaabbbbb'), 'C':np.arange(10),
12451
+ 'B':date_range('2012-01-01', periods=5).tolist()*2 })
12452
+
12453
+ df.iloc[3,1] = np.NaN
12454
+ left = df.set_index(['A', 'B']).unstack()
12455
+
12456
+ vals = np.array([[3, 0, 1, 2, nan, 4], [nan, 5, 6, 7, 8, 9]])
12457
+ idx = Index(['a', 'b'], name='A')
12458
+ cols = MultiIndex(levels=[['C'], date_range('2012-01-01', periods=5)],
12459
+ labels=[[0, 0, 0, 0, 0, 0], [-1, 0, 1, 2, 3, 4]],
12460
+ names=[None, 'B'])
12461
+
12462
+ right = DataFrame(vals, columns=cols, index=idx)
12463
+ assert_frame_equal(left, right)
12464
+
12465
+ # GH4862
12466
+ vals = [['Hg', nan, nan, 680585148],
12467
+ ['U', 0.0, nan, 680585148],
12468
+ ['Pb', 7.07e-06, nan, 680585148],
12469
+ ['Sn', 2.3614e-05, 0.0133, 680607017],
12470
+ ['Ag', 0.0, 0.0133, 680607017],
12471
+ ['Hg', -0.00015, 0.0133, 680607017]]
12472
+ df = DataFrame(vals, columns=['agent', 'change', 'dosage', 's_id'],
12473
+ index=[17263, 17264, 17265, 17266, 17267, 17268])
12474
+
12475
+ left = df.copy().set_index(['s_id','dosage','agent']).unstack()
12476
+
12477
+ vals = [[nan, nan, 7.07e-06, nan, 0.0],
12478
+ [0.0, -0.00015, nan, 2.3614e-05, nan]]
12479
+
12480
+ idx = MultiIndex(levels=[[680585148, 680607017], [0.0133]],
12481
+ labels=[[0, 1], [-1, 0]],
12482
+ names=['s_id', 'dosage'])
12483
+
12484
+ cols = MultiIndex(levels=[['change'], ['Ag', 'Hg', 'Pb', 'Sn', 'U']],
12485
+ labels=[[0, 0, 0, 0, 0], [0, 1, 2, 3, 4]],
12486
+ names=[None, 'agent'])
12487
+
12488
+ right = DataFrame(vals, columns=cols, index=idx)
12489
+ assert_frame_equal(left, right)
12490
+
12491
+ left = df.ix[17264:].copy().set_index(['s_id','dosage','agent'])
12492
+ assert_frame_equal(left.unstack(), right)
12493
+
12388
12494
def test_stack_datetime_column_multiIndex(self):
12389
12495
# GH 8039
12390
12496
t = datetime(2014, 1, 1)
0 commit comments