@@ -699,7 +699,6 @@ def test_get_group(self):
699699 expected = wp .reindex (major = [x for x in wp .major_axis if x .month == 1 ])
700700 assert_panel_equal (gp , expected )
701701
702-
703702 # GH 5267
704703 # be datelike friendly
705704 df = DataFrame ({'DATE' : pd .to_datetime (['10-Oct-2013' , '10-Oct-2013' , '10-Oct-2013' ,
@@ -2837,6 +2836,49 @@ def test_groupby_list_infer_array_like(self):
28372836 result = df .groupby (['foo' , 'bar' ]).mean ()
28382837 expected = df .groupby ([df ['foo' ], df ['bar' ]]).mean ()[['val' ]]
28392838
2839+ def test_groupby_nat_exclude (self ):
2840+ # GH 6992
2841+ df = pd .DataFrame ({'values' : np .random .randn (8 ),
2842+ 'dt' : [np .nan , pd .Timestamp ('2013-01-01' ), np .nan , pd .Timestamp ('2013-02-01' ),
2843+ np .nan , pd .Timestamp ('2013-02-01' ), np .nan , pd .Timestamp ('2013-01-01' )],
2844+ 'str' : [np .nan , 'a' , np .nan , 'a' ,
2845+ np .nan , 'a' , np .nan , 'b' ]})
2846+ grouped = df .groupby ('dt' )
2847+
2848+ expected = [[1 , 7 ], [3 , 5 ]]
2849+ keys = sorted (grouped .groups .keys ())
2850+ self .assertEqual (len (keys ), 2 )
2851+ for k , e in zip (keys , expected ):
2852+ # grouped.groups keys are np.datetime64 with system tz
2853+ # not to be affected by tz, only compare values
2854+ self .assertEqual (grouped .groups [k ], e )
2855+
2856+ # confirm obj is not filtered
2857+ tm .assert_frame_equal (grouped .grouper .groupings [0 ].obj , df )
2858+ self .assertEqual (grouped .ngroups , 2 )
2859+ expected = {Timestamp ('2013-01-01 00:00:00' ): np .array ([1 , 7 ]),
2860+ Timestamp ('2013-02-01 00:00:00' ): np .array ([3 , 5 ])}
2861+ for k in grouped .indices :
2862+ self .assert_numpy_array_equal (grouped .indices [k ], expected [k ])
2863+
2864+ tm .assert_frame_equal (grouped .get_group (Timestamp ('2013-01-01' )), df .iloc [[1 , 7 ]])
2865+ tm .assert_frame_equal (grouped .get_group (Timestamp ('2013-02-01' )), df .iloc [[3 , 5 ]])
2866+
2867+ self .assertRaises (KeyError , grouped .get_group , pd .NaT )
2868+
2869+ nan_df = DataFrame ({'nan' : [np .nan , np .nan , np .nan ],
2870+ 'nat' : [pd .NaT , pd .NaT , pd .NaT ]})
2871+ self .assertEqual (nan_df ['nan' ].dtype , 'float64' )
2872+ self .assertEqual (nan_df ['nat' ].dtype , 'datetime64[ns]' )
2873+
2874+ for key in ['nan' , 'nat' ]:
2875+ grouped = nan_df .groupby (key )
2876+ self .assertEqual (grouped .groups , {})
2877+ self .assertEqual (grouped .ngroups , 0 )
2878+ self .assertEqual (grouped .indices , {})
2879+ self .assertRaises (KeyError , grouped .get_group , np .nan )
2880+ self .assertRaises (KeyError , grouped .get_group , pd .NaT )
2881+
28402882 def test_dictify (self ):
28412883 dict (iter (self .df .groupby ('A' )))
28422884 dict (iter (self .df .groupby (['A' , 'B' ])))
0 commit comments