@@ -1678,38 +1678,40 @@ def test_tuple_correct_keyerror():
1678
1678
1679
1679
def test_dup_index_names ():
1680
1680
# dup. index names in groupby operations should be renamed (GH 19029):
1681
- df = pd .DataFrame ({'date' : list ( pd .date_range ('5.1.2018' , '5.3.2018' ) ),
1681
+ df = pd .DataFrame ({'date' : pd .date_range ('5.1.2018' , '5.3.2018' ),
1682
1682
'vals' : list (range (3 ))})
1683
1683
1684
- mi = pd .MultiIndex .from_product ([[5 ], [1 , 2 , 3 ]], names = ['date0' , 'date1' ])
1684
+ # duplicates get suffixed by integer position
1685
+ mi = pd .MultiIndex .from_product ([[5 ], [1 , 2 , 3 ]],
1686
+ names = ['date_0' , 'date_1' ])
1685
1687
expected = pd .Series (data = list (range (3 )), index = mi , name = 'vals' )
1686
-
1687
- failed = False
1688
- try :
1689
- result = df .groupby ([df .date .dt .month , df .date .dt .day ])['vals' ].sum ()
1690
- except ValueError :
1691
- failed = True
1692
-
1693
- assert failed is False
1688
+ result = df .groupby ([df .date .dt .month , df .date .dt .day ])['vals' ].sum ()
1694
1689
1695
1690
tm .assert_series_equal (result , expected )
1696
1691
1697
-
1698
- def test_empty_index_names ():
1699
- # don't rename frames in case no names were assigned (GH 19029)
1700
- df = pd .DataFrame ({'date' : list (pd .date_range ('5.1.2018' , '5.3.2018' )),
1701
- 'vals' : list (range (3 ))})
1702
-
1703
- mi = pd .MultiIndex .from_product ([[5 ], [1 , 2 , 3 ]])
1692
+ # 2 out of 3 are duplicates and None
1693
+ mi = pd .MultiIndex .from_product ([[2018 ], [5 ], [1 , 2 , 3 ]],
1694
+ names = ['0' , '1' , 'date' ])
1704
1695
expected = pd .Series (data = list (range (3 )), index = mi , name = 'vals' )
1696
+ result = df .groupby ([df .date .dt .year .rename (None ),
1697
+ df .date .dt .month .rename (None ),
1698
+ df .date .dt .day ])['vals' ].sum ()
1699
+ tm .assert_series_equal (result , expected )
1705
1700
1706
- failed = False
1707
- try :
1708
- result = df . groupby ([ df . date . dt . month . rename ( None ),
1709
- df . date . dt . day . rename ( None )])[ 'vals' ]. sum ( )
1710
- except ValueError :
1711
- failed = True
1712
-
1713
- assert failed is False
1701
+ # 2 out of 3 names (not None) are duplicates, the remaining is None
1702
+ mi = pd . MultiIndex . from_product ([[ 2018 ], [ 5 ], [ 1 , 2 , 3 ]],
1703
+ names = [ 'date_0' , None , 'date_1' ])
1704
+ expected = pd . Series ( data = list ( range ( 3 )), index = mi , name = 'vals' )
1705
+ result = df . groupby ([ df . date . dt . year ,
1706
+ df . date . dt . month . rename ( None ),
1707
+ df . date . dt . day ])[ 'vals' ]. sum ()
1708
+ tm . assert_series_equal ( result , expected )
1714
1709
1710
+ # all are None
1711
+ mi = pd .MultiIndex .from_product ([[2018 ], [5 ], [1 , 2 , 3 ]],
1712
+ names = [None , None , None ])
1713
+ expected = pd .Series (data = list (range (3 )), index = mi , name = 'vals' )
1714
+ result = df .groupby ([df .date .dt .year .rename (None ),
1715
+ df .date .dt .month .rename (None ),
1716
+ df .date .dt .day .rename (None )])['vals' ].sum ()
1715
1717
tm .assert_series_equal (result , expected )
0 commit comments