@@ -2757,6 +2757,93 @@ def test_comparison_different_length(self):
2757
2757
b = Series ([2 , 3 , 4 ])
2758
2758
self .assertRaises (ValueError , a .__eq__ , b )
2759
2759
2760
+ def test_comparison_label_based (self ):
2761
+
2762
+ # GH 4947
2763
+ # comparisons should be label based
2764
+
2765
+ a = Series ([True , False , True ], list ('bca' ))
2766
+ b = Series ([False , True , False ], list ('abc' ))
2767
+
2768
+ expected = Series ([True , False , False ], list ('bca' ))
2769
+ result = a & b
2770
+ assert_series_equal (result ,expected )
2771
+
2772
+ expected = Series ([True , False , True ], list ('bca' ))
2773
+ result = a | b
2774
+ assert_series_equal (result ,expected )
2775
+
2776
+ expected = Series ([False , False , True ], list ('bca' ))
2777
+ result = a ^ b
2778
+ assert_series_equal (result ,expected )
2779
+
2780
+ # rhs is bigger
2781
+ a = Series ([True , False , True ], list ('bca' ))
2782
+ b = Series ([False , True , False , True ], list ('abcd' ))
2783
+
2784
+ expected = Series ([True , False , False ], list ('bca' ))
2785
+ result = a & b
2786
+ assert_series_equal (result ,expected )
2787
+
2788
+ expected = Series ([True , False , True ], list ('bca' ))
2789
+ result = a | b
2790
+ assert_series_equal (result ,expected )
2791
+
2792
+ # filling
2793
+
2794
+ # vs empty
2795
+ result = a & Series ([])
2796
+ expected = Series ([False , False , False ], list ('bca' ))
2797
+ assert_series_equal (result ,expected )
2798
+
2799
+ result = a | Series ([])
2800
+ expected = Series ([True , False , True ], list ('bca' ))
2801
+ assert_series_equal (result ,expected )
2802
+
2803
+ # vs non-matching
2804
+ result = a & Series ([1 ],['z' ])
2805
+ expected = Series ([False , False , False ], list ('bca' ))
2806
+ assert_series_equal (result ,expected )
2807
+
2808
+ result = a | Series ([1 ],['z' ])
2809
+ expected = Series ([True , False , True ], list ('bca' ))
2810
+ assert_series_equal (result ,expected )
2811
+
2812
+ # identity
2813
+ # we would like s[s|e] == s to hold for any e, whether empty or not
2814
+ for e in [Series ([]),Series ([1 ],['z' ]),Series (['z' ]),Series (np .nan ,b .index ),Series (np .nan ,a .index )]:
2815
+ result = a [a | e ]
2816
+ assert_series_equal (result ,a [a ])
2817
+
2818
+ # vs scalars
2819
+ index = list ('bca' )
2820
+ t = Series ([True ,False ,True ])
2821
+
2822
+ for v in [True ,1 ,2 ]:
2823
+ result = Series ([True ,False ,True ],index = index ) | v
2824
+ expected = Series ([True ,True ,True ],index = index )
2825
+ assert_series_equal (result ,expected )
2826
+
2827
+ for v in [np .nan ,'foo' ]:
2828
+ self .assertRaises (TypeError , lambda : t | v )
2829
+
2830
+ for v in [False ,0 ]:
2831
+ result = Series ([True ,False ,True ],index = index ) | v
2832
+ expected = Series ([True ,False ,True ],index = index )
2833
+ assert_series_equal (result ,expected )
2834
+
2835
+ for v in [True ,1 ]:
2836
+ result = Series ([True ,False ,True ],index = index ) & v
2837
+ expected = Series ([True ,False ,True ],index = index )
2838
+ assert_series_equal (result ,expected )
2839
+
2840
+ for v in [False ,0 ]:
2841
+ result = Series ([True ,False ,True ],index = index ) & v
2842
+ expected = Series ([False ,False ,False ],index = index )
2843
+ assert_series_equal (result ,expected )
2844
+ for v in [np .nan ]:
2845
+ self .assertRaises (TypeError , lambda : t & v )
2846
+
2760
2847
def test_between (self ):
2761
2848
s = Series (bdate_range ('1/1/2000' , periods = 20 ).asobject )
2762
2849
s [::2 ] = np .nan
@@ -2793,12 +2880,14 @@ def test_scalar_na_cmp_corners(self):
2793
2880
def tester (a , b ):
2794
2881
return a & b
2795
2882
2796
- self .assertRaises (ValueError , tester , s , datetime (2005 , 1 , 1 ))
2883
+ self .assertRaises (TypeError , tester , s , datetime (2005 , 1 , 1 ))
2797
2884
2798
2885
s = Series ([2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , datetime (2005 , 1 , 1 )])
2799
2886
s [::2 ] = np .nan
2800
2887
2801
- assert_series_equal (tester (s , list (s )), s )
2888
+ expected = Series (True ,index = s .index )
2889
+ expected [::2 ] = False
2890
+ assert_series_equal (tester (s , list (s )), expected )
2802
2891
2803
2892
d = DataFrame ({'A' : s })
2804
2893
# TODO: Fix this exception - needs to be fixed! (see GH5035)
0 commit comments