@@ -11431,20 +11431,6 @@ def test_isin_dict(self):
11431
11431
result = df .isin (d )
11432
11432
assert_frame_equal (result , expected )
11433
11433
11434
- # iloc
11435
- df = DataFrame ({'A' : ['a' , 'b' , 'c' ], 'B' : ['a' , 'e' , 'f' ]})
11436
- d = {0 : ['a' ]}
11437
- expected = DataFrame (False , df .index , df .columns )
11438
-
11439
- # without using iloc
11440
- result = df .isin (d )
11441
- assert_frame_equal (result , expected )
11442
-
11443
- # using iloc
11444
- result = df .isin (d , iloc = True )
11445
- expected .iloc [0 , 0 ] = True
11446
- assert_frame_equal (result , expected )
11447
-
11448
11434
def test_isin_with_string_scalar (self ):
11449
11435
#GH4763
11450
11436
df = DataFrame ({'vals' : [1 , 2 , 3 , 4 ], 'ids' : ['a' , 'b' , 'f' , 'n' ],
@@ -11456,6 +11442,84 @@ def test_isin_with_string_scalar(self):
11456
11442
with tm .assertRaises (TypeError ):
11457
11443
df .isin ('aaa' )
11458
11444
11445
+ def test_isin_df (self ):
11446
+ df1 = DataFrame ({'A' : [1 , 2 , 3 , 4 ], 'B' : [2 , np .nan , 4 , 4 ]})
11447
+ df2 = DataFrame ({'A' : [0 , 2 , 12 , 4 ], 'B' : [2 , np .nan , 4 , 5 ]})
11448
+ expected = DataFrame (False , df1 .index , df1 .columns )
11449
+ result = df1 .isin (df2 )
11450
+ expected ['A' ].loc [[1 , 3 ]] = True
11451
+ expected ['B' ].loc [[0 , 2 ]] = True
11452
+ assert_frame_equal (result , expected )
11453
+
11454
+ # partial overlapping columns
11455
+ df2 .columns = ['A' , 'C' ]
11456
+ result = df1 .isin (df2 )
11457
+ expected ['B' ] = False
11458
+ assert_frame_equal (result , expected )
11459
+
11460
+ def test_isin_df_dupe_values (self ):
11461
+ df1 = DataFrame ({'A' : [1 , 2 , 3 , 4 ], 'B' : [2 , np .nan , 4 , 4 ]})
11462
+ # just cols duped
11463
+ df2 = DataFrame ([[0 , 2 ], [12 , 4 ], [2 , np .nan ], [4 , 5 ]],
11464
+ columns = ['B' , 'B' ])
11465
+ with tm .assertRaises (ValueError ):
11466
+ df1 .isin (df2 )
11467
+
11468
+ # just index duped
11469
+ df2 = DataFrame ([[0 , 2 ], [12 , 4 ], [2 , np .nan ], [4 , 5 ]],
11470
+ columns = ['A' , 'B' ], index = [0 , 0 , 1 , 1 ])
11471
+ with tm .assertRaises (ValueError ):
11472
+ df1 .isin (df2 )
11473
+
11474
+ # cols and index:
11475
+ df2 .columns = ['B' , 'B' ]
11476
+ with tm .assertRaises (ValueError ):
11477
+ df1 .isin (df2 )
11478
+
11479
+ def test_isin_dupe_self (self ):
11480
+ other = DataFrame ({'A' : [1 , 0 , 1 , 0 ], 'B' : [1 , 1 , 0 , 0 ]})
11481
+ df = DataFrame ([[1 , 1 ], [1 , 0 ], [0 , 0 ]], columns = ['A' ,'A' ])
11482
+ result = df .isin (other )
11483
+ expected = DataFrame (False , index = df .index , columns = df .columns )
11484
+ expected .loc [0 ] = True
11485
+ expected .iloc [1 , 1 ] = True
11486
+ assert_frame_equal (result , expected )
11487
+
11488
+
11489
+ def test_isin_against_series (self ):
11490
+ df = pd .DataFrame ({'A' : [1 , 2 , 3 , 4 ], 'B' : [2 , np .nan , 4 , 4 ]},
11491
+ index = ['a' , 'b' , 'c' , 'd' ])
11492
+ s = pd .Series ([1 , 3 , 11 , 4 ], index = ['a' , 'b' , 'c' , 'd' ])
11493
+ expected = DataFrame (False , index = df .index , columns = df .columns )
11494
+ expected ['A' ].loc ['a' ] = True
11495
+ expected .loc ['d' ] = True
11496
+ result = df .isin (s )
11497
+ assert_frame_equal (result , expected )
11498
+
11499
+ def test_isin_multiIndex (self ):
11500
+ idx = MultiIndex .from_tuples ([(0 , 'a' , 'foo' ), (0 , 'a' , 'bar' ),
11501
+ (0 , 'b' , 'bar' ), (0 , 'b' , 'baz' ),
11502
+ (2 , 'a' , 'foo' ), (2 , 'a' , 'bar' ),
11503
+ (2 , 'c' , 'bar' ), (2 , 'c' , 'baz' ),
11504
+ (1 , 'b' , 'foo' ), (1 , 'b' , 'bar' ),
11505
+ (1 , 'c' , 'bar' ), (1 , 'c' , 'baz' )])
11506
+ df1 = DataFrame ({'A' : np .ones (12 ),
11507
+ 'B' : np .zeros (12 )}, index = idx )
11508
+ df2 = DataFrame ({'A' : [1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 ],
11509
+ 'B' : [1 , 1 , 0 , 1 , 1 , 0 , 0 , 1 , 1 , 1 , 1 , 1 ]})
11510
+ # against regular index
11511
+ expected = DataFrame (False , index = df1 .index , columns = df1 .columns )
11512
+ result = df1 .isin (df2 )
11513
+ assert_frame_equal (result , expected )
11514
+
11515
+ df2 .index = idx
11516
+ expected = df2 .values .astype (np .bool )
11517
+ expected [:, 1 ] = ~ expected [:, 1 ]
11518
+ expected = DataFrame (expected , columns = ['A' , 'B' ], index = idx )
11519
+
11520
+ result = df1 .isin (df2 )
11521
+ assert_frame_equal (result , expected )
11522
+
11459
11523
def test_to_csv_date_format (self ):
11460
11524
from pandas import to_datetime
11461
11525
pname = '__tmp_to_csv_date_format__'
0 commit comments