Python pandas.DatetimeIndex() Examples
The following are 30
code examples of pandas.DatetimeIndex().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
pandas
, or try the search function
.
Example #1
Source File: numpy_records.py From arctic with GNU Lesser General Public License v2.1 | 6 votes |
def _index_from_records(self, recarr): index = recarr.dtype.metadata['index'] if len(index) == 1: rtn = Index(np.copy(recarr[str(index[0])]), name=index[0]) if isinstance(rtn, DatetimeIndex) and 'index_tz' in recarr.dtype.metadata: rtn = rtn.tz_localize('UTC').tz_convert(recarr.dtype.metadata['index_tz']) else: level_arrays = [] index_tz = recarr.dtype.metadata.get('index_tz', []) for level_no, index_name in enumerate(index): # build each index level separately to ensure we end up with the right index dtype level = Index(np.copy(recarr[str(index_name)])) if level_no < len(index_tz): tz = index_tz[level_no] if tz is not None: if not isinstance(level, DatetimeIndex) and len(level) == 0: # index type information got lost during save as the index was empty, cast back level = DatetimeIndex([], tz=tz) else: level = level.tz_localize('UTC').tz_convert(tz) level_arrays.append(level) rtn = MultiIndex.from_arrays(level_arrays, names=index) return rtn
Example #2
Source File: test_pandas_store.py From arctic with GNU Lesser General Public License v2.1 | 6 votes |
def test_dataframe_append_should_add_new_column(library): data = np.zeros((2,), dtype=[('A', 'i4'), ('B', 'f4'), ('C', 'a10')]) data[:] = [(1, 2., 'Hello'), (2, 3., "World")] df = DataFrame(data, index=DatetimeIndex(np.array([dt(2013, 1, 1), dt(2013, 1, 2)]).astype('datetime64[ns]'), name='DATETIME')) data2 = np.zeros((1,), dtype=[('A', 'i4'), ('B', 'f4'), ('C', 'a10'), ('D', 'f4')]) data2[:] = [(4, 5., 'Hi', 6.)] df2 = DataFrame(data2, index=DatetimeIndex(np.array([dt(2013, 1, 3)]).astype('datetime64[ns]'), name='DATETIME')) expected_data = np.zeros((3,), dtype=[('A', 'i4'), ('B', 'f4'), ('C', 'a10'), ('D', 'f4')]) expected_data[:] = [(1, 2., 'Hello', np.nan), (2, 3., "World", np.nan), (4, 5., 'Hi', 6.)] expected = DataFrame(expected_data, index=DatetimeIndex(np.array([dt(2013, 1, 1), dt(2013, 1, 2), dt(2013, 1, 3)]).astype('datetime64[ns]'), name='DATETIME')) library.write('pandas', df) library.append('pandas', df2) actual = library.read('pandas').data assert_frame_equal(expected, actual)
Example #3
Source File: test_setops.py From recruit with Apache License 2.0 | 6 votes |
def test_intersection(self): rng = date_range('1/1/2000', periods=50, freq=Minute()) rng1 = rng[10:] rng2 = rng[:25] the_int = rng1.intersection(rng2) expected = rng[10:25] tm.assert_index_equal(the_int, expected) assert isinstance(the_int, DatetimeIndex) assert the_int.freq == rng.freq the_int = rng1.intersection(rng2.view(DatetimeIndex)) tm.assert_index_equal(the_int, expected) # non-overlapping the_int = rng[:10].intersection(rng[10:]) expected = DatetimeIndex([]) tm.assert_index_equal(the_int, expected)
Example #4
Source File: test_construction.py From recruit with Apache License 2.0 | 6 votes |
def test_categorical_preserves_tz(self): # GH#18664 retain tz when going DTI-->Categorical-->DTI # TODO: parametrize over DatetimeIndex/DatetimeArray # once CategoricalIndex(DTA) works dti = pd.DatetimeIndex( [pd.NaT, '2015-01-01', '1999-04-06 15:14:13', '2015-01-01'], tz='US/Eastern') ci = pd.CategoricalIndex(dti) carr = pd.Categorical(dti) cser = pd.Series(ci) for obj in [ci, carr, cser]: result = pd.DatetimeIndex(obj) tm.assert_index_equal(result, dti)
Example #5
Source File: test_fixes.py From arctic with GNU Lesser General Public License v2.1 | 6 votes |
def test_missing_cols(chunkstore_lib): index = DatetimeIndex(pd.date_range('2019-01-01', periods=3, freq='D'), name='date') index2 = DatetimeIndex(pd.date_range('2019-01-04', periods=3, freq='D'), name='date') expected_index = DatetimeIndex(pd.date_range('2019-01-01', periods=6, freq='D'), name='date') expected_df = DataFrame({'A': [1, 2, 3, 40, 50, 60], 'B': [5.0,6.0,7.0, np.nan, np.nan, np.nan]}, index=expected_index) df = pd.DataFrame({'A': [1, 2, 3], 'B': [5,6,7]}, index=index) chunkstore_lib.write('test', df, chunk_size='D') df = pd.DataFrame({'A': [40, 50, 60]}, index=index2) chunkstore_lib.append('test', df, chunk_size='D') assert_frame_equal(chunkstore_lib.read('test'), expected_df) df = chunkstore_lib.read('test', columns=['B']) assert_frame_equal(df, expected_df['B'].to_frame())
Example #6
Source File: datetimelike.py From recruit with Apache License 2.0 | 6 votes |
def test_map_dictlike(self, mapper): expected = self.index + self.index.freq # don't compare the freqs if isinstance(expected, pd.DatetimeIndex): expected.freq = None result = self.index.map(mapper(expected, self.index)) tm.assert_index_equal(result, expected) expected = pd.Index([pd.NaT] + self.index[1:].tolist()) result = self.index.map(mapper(expected, self.index)) tm.assert_index_equal(result, expected) # empty map; these map to np.nan because we cannot know # to re-infer things expected = pd.Index([np.nan] * len(self.index)) result = self.index.map(mapper([], [])) tm.assert_index_equal(result, expected)
Example #7
Source File: test_base.py From recruit with Apache License 2.0 | 6 votes |
def test_constructor_from_index_dtlike(self, cast_as_obj, index): if cast_as_obj: result = pd.Index(index.astype(object)) else: result = pd.Index(index) tm.assert_index_equal(result, index) if isinstance(index, pd.DatetimeIndex): assert result.tz == index.tz if cast_as_obj: # GH#23524 check that Index(dti, dtype=object) does not # incorrectly raise ValueError, and that nanoseconds are not # dropped index += pd.Timedelta(nanoseconds=50) result = pd.Index(index, dtype=object) assert result.dtype == np.object_ assert list(result) == list(index)
Example #8
Source File: test_construction.py From recruit with Apache License 2.0 | 6 votes |
def test_construction_with_alt_tz_localize(self, kwargs, tz_aware_fixture): tz = tz_aware_fixture i = pd.date_range('20130101', periods=5, freq='H', tz=tz) kwargs = {key: attrgetter(val)(i) for key, val in kwargs.items()} if str(tz) in ('UTC', 'tzutc()'): warn = None else: warn = FutureWarning with tm.assert_produces_warning(warn, check_stacklevel=False): result = DatetimeIndex(i.tz_localize(None).asi8, **kwargs) expected = DatetimeIndex(i, **kwargs) tm.assert_index_equal(result, expected) # localize into the provided tz i2 = DatetimeIndex(i.tz_localize(None).asi8, tz='UTC') expected = i.tz_localize(None).tz_localize('UTC') tm.assert_index_equal(i2, expected) # incompat tz/dtype pytest.raises(ValueError, lambda: DatetimeIndex( i.tz_localize(None).asi8, dtype=i.dtype, tz='US/Pacific'))
Example #9
Source File: test_pandas_store.py From arctic with GNU Lesser General Public License v2.1 | 6 votes |
def test_dataframe_append_should_add_new_columns_and_reorder(library): data = np.zeros((2,), dtype=[('A', 'i4'), ('B', 'f4'), ('C', 'a10')]) data[:] = [(1, 2., 'Hello'), (2, 3., "World")] df = DataFrame(data, index=DatetimeIndex(np.array([dt(2013, 1, 1), dt(2013, 1, 2)]).astype('datetime64[ns]'), name='DATETIME')) data2 = np.zeros((1,), dtype=[('C', 'a10'), ('A', 'i4'), ('E', 'a1'), ('B', 'f4'), ('D', 'f4'), ('F', 'i4')]) data2[:] = [('Hi', 4, 'Y', 5., 6., 7)] df2 = DataFrame(data2, index=DatetimeIndex(np.array([dt(2013, 1, 3)]).astype('datetime64[ns]'), name='DATETIME')) expected_data = np.zeros((3,), dtype=[('C', 'a10'), ('A', 'i4'), ('E', 'a1'), ('B', 'f4'), ('D', 'f4'), ('F', 'i4')]) expected_data[:] = [('Hello', 1, '', 2., np.nan, 0), ("World", 2, '', 3., np.nan, 0), ('Hi', 4, 'Y', 5., 6., 7)] expected = DataFrame(expected_data, index=DatetimeIndex(np.array([dt(2013, 1, 1), dt(2013, 1, 2), dt(2013, 1, 3)]).astype('datetime64[ns]'), name='DATETIME')) library.write('pandas', df) library.append('pandas', df2) actual = library.read('pandas').data assert_frame_equal(expected, actual) # -- auto generated tests --- #
Example #10
Source File: date_chunker.py From arctic with GNU Lesser General Public License v2.1 | 6 votes |
def exclude(self, data, range_obj): """ Removes data within the bounds of the range object (inclusive) returns ------- data, filtered by range_obj """ if isinstance(range_obj, (pd.DatetimeIndex, tuple)): range_obj = DateRange(range_obj[0], range_obj[-1]) if 'date' in data.index.names: return data[(data.index.get_level_values('date') < range_obj.start) | (data.index.get_level_values('date') > range_obj.end)] elif 'date' in data.columns: return data[(data.date < range_obj.start) | (data.date > range_obj.end)] else: return data
Example #11
Source File: date_chunker.py From arctic with GNU Lesser General Public License v2.1 | 6 votes |
def to_mongo(self, range_obj): """ takes the range object used for this chunker type and converts it into a string that can be use for a mongo query that filters by the range returns ------- dict """ if isinstance(range_obj, (pd.DatetimeIndex, tuple)): range_obj = DateRange(range_obj[0], range_obj[-1]) if range_obj.start and range_obj.end: return {'$and': [{START: {'$lte': range_obj.end}}, {END: {'$gte': range_obj.start}}]} elif range_obj.start: return {END: {'$gte': range_obj.start}} elif range_obj.end: return {START: {'$lte': range_obj.end}} else: return {}
Example #12
Source File: test_base.py From recruit with Apache License 2.0 | 6 votes |
def test_constructor_from_frame_series_freq(self): # GH 6273 # create from a series, passing a freq dts = ['1-1-1990', '2-1-1990', '3-1-1990', '4-1-1990', '5-1-1990'] expected = DatetimeIndex(dts, freq='MS') df = pd.DataFrame(np.random.rand(5, 3)) df['date'] = dts result = DatetimeIndex(df['date'], freq='MS') assert df['date'].dtype == object expected.name = 'date' tm.assert_index_equal(result, expected) expected = pd.Series(dts, name='date') tm.assert_series_equal(df['date'], expected) # GH 6274 # infer freq of same freq = pd.infer_freq(df['date']) assert freq == 'MS'
Example #13
Source File: numpy_records.py From arctic with GNU Lesser General Public License v2.1 | 6 votes |
def _index_to_records(self, df): metadata = {} index = df.index index_tz = None if isinstance(index, MultiIndex): ix_vals, index_names, index_tz = _multi_index_to_records(index, len(df) == 0) else: ix_vals = [index.values] index_names = list(index.names) if index_names[0] is None: index_names = ['index'] log.info("Index has no name, defaulting to 'index'") if isinstance(index, DatetimeIndex) and index.tz is not None: index_tz = get_timezone(index.tz) if index_tz is not None: metadata['index_tz'] = index_tz metadata['index'] = index_names return index_names, ix_vals, metadata
Example #14
Source File: numpy_records.py From arctic with GNU Lesser General Public License v2.1 | 6 votes |
def _multi_index_to_records(index, empty_index): # array of tuples to numpy cols. copy copy copy if not empty_index: ix_vals = list(map(np.array, [index.get_level_values(i) for i in range(index.nlevels)])) else: # empty multi index has no size, create empty arrays for recarry. ix_vals = [np.array([]) for n in index.names] index_names = list(index.names) count = 0 for i, n in enumerate(index_names): if n is None: index_names[i] = 'level_%d' % count count += 1 log.info("Level in MultiIndex has no name, defaulting to %s" % index_names[i]) index_tz = [get_timezone(i.tz) if isinstance(i, DatetimeIndex) else None for i in index.levels] return ix_vals, index_names, index_tz
Example #15
Source File: test_indexing.py From recruit with Apache License 2.0 | 6 votes |
def test_dti_business_getitem(self): rng = pd.bdate_range(START, END) smaller = rng[:5] exp = DatetimeIndex(rng.view(np.ndarray)[:5]) tm.assert_index_equal(smaller, exp) assert smaller.freq == rng.freq sliced = rng[::5] assert sliced.freq == BDay() * 5 fancy_indexed = rng[[4, 3, 2, 1, 0]] assert len(fancy_indexed) == 5 assert isinstance(fancy_indexed, DatetimeIndex) assert fancy_indexed.freq is None # 32-bit vs. 64-bit platforms assert rng[4] == rng[np.int_(4)]
Example #16
Source File: analyze_estimates.py From performance_tracker with GNU General Public License v3.0 | 6 votes |
def match_arrivals_with_schedule(estimated_trips, schedule_direction): schedule_direction.loc[:,"datetime_utc"] = pd.to_datetime(schedule_direction["datetime"], utc=True) estimated_trips.loc[:,"datetime_utc"] = pd.to_datetime(estimated_trips["datetime"], utc=True) schedule_direction = schedule_direction.set_index(pd.DatetimeIndex(schedule_direction["datetime_utc"])).sort_index() matched_estimates = [ match_times( stop_id, stop_estimates, schedule_direction[schedule_direction["stop_id"] == stop_id], ) for stop_id, stop_estimates in estimated_trips.groupby(["stop_id"]) ] matched_estimates = [x for x in matched_estimates if x is not None] matched_estimates = pd.concat(matched_estimates) matched_estimates["since_scheduled"] = ( matched_estimates["datetime_utc"] - matched_estimates["closest_scheduled"] ) return matched_estimates
Example #17
Source File: analyze_estimates.py From performance_tracker with GNU General Public License v3.0 | 6 votes |
def match_times(stop_id, estimates, schedule): # This technique finds the closest scheduled time to actual arrivals # This is flawed since it does not account for scheduled arrivals where # a train never arrived. # It's difficult to search the other way around however, since our estimated # arrival times are incomplete (see "select.dropna" in "estimate_arrivals"). # If we search for the closest estimated arrival to each scheduled stop, # we will get some that are far apart because the actual train was likely associated # with a different scheduled stop time. # This way seems to be fairer on Metro, but we are open to improvements! # Try clause is here because there was an unexplained bug occurring on April 10 2019 with data inputs from around 1:35pm. There was an index (-1) out of range error. # Exact cause of the issue is still uncertain but there was a vehicle position observation out of range on the blue line at that time. try: estimates.loc[:, "closest_scheduled"] = estimates.datetime_utc.apply( lambda x: schedule.index[schedule.index.get_loc(x, method="nearest")] ) estimates.loc[:, "closest_scheduled"] = pd.DatetimeIndex( estimates["closest_scheduled"] ) return estimates except: return None
Example #18
Source File: test_setops.py From recruit with Apache License 2.0 | 6 votes |
def test_difference(self, tz, sort): rng_dates = ['1/2/2000', '1/3/2000', '1/1/2000', '1/4/2000', '1/5/2000'] rng1 = pd.DatetimeIndex(rng_dates, tz=tz) other1 = pd.date_range('1/6/2000', freq='D', periods=5, tz=tz) expected1 = pd.DatetimeIndex(rng_dates, tz=tz) rng2 = pd.DatetimeIndex(rng_dates, tz=tz) other2 = pd.date_range('1/4/2000', freq='D', periods=5, tz=tz) expected2 = pd.DatetimeIndex(rng_dates[:3], tz=tz) rng3 = pd.DatetimeIndex(rng_dates, tz=tz) other3 = pd.DatetimeIndex([], tz=tz) expected3 = pd.DatetimeIndex(rng_dates, tz=tz) for rng, other, expected in [(rng1, other1, expected1), (rng2, other2, expected2), (rng3, other3, expected3)]: result_diff = rng.difference(other, sort) if sort is None: expected = expected.sort_values() tm.assert_index_equal(result_diff, expected)
Example #19
Source File: test_indexing.py From recruit with Apache License 2.0 | 6 votes |
def test_take2(self, tz): dates = [datetime(2010, 1, 1, 14), datetime(2010, 1, 1, 15), datetime(2010, 1, 1, 17), datetime(2010, 1, 1, 21)] idx = pd.date_range(start='2010-01-01 09:00', end='2010-02-01 09:00', freq='H', tz=tz, name='idx') expected = DatetimeIndex(dates, freq=None, name='idx', tz=tz) taken1 = idx.take([5, 6, 8, 12]) taken2 = idx[[5, 6, 8, 12]] for taken in [taken1, taken2]: tm.assert_index_equal(taken, expected) assert isinstance(taken, DatetimeIndex) assert taken.freq is None assert taken.tz == expected.tz assert taken.name == expected.name
Example #20
Source File: test_setops.py From recruit with Apache License 2.0 | 6 votes |
def test_union(self, tz): rng1 = pd.date_range('1/1/2000', freq='D', periods=5, tz=tz) other1 = pd.date_range('1/6/2000', freq='D', periods=5, tz=tz) expected1 = pd.date_range('1/1/2000', freq='D', periods=10, tz=tz) rng2 = pd.date_range('1/1/2000', freq='D', periods=5, tz=tz) other2 = pd.date_range('1/4/2000', freq='D', periods=5, tz=tz) expected2 = pd.date_range('1/1/2000', freq='D', periods=8, tz=tz) rng3 = pd.date_range('1/1/2000', freq='D', periods=5, tz=tz) other3 = pd.DatetimeIndex([], tz=tz) expected3 = pd.date_range('1/1/2000', freq='D', periods=5, tz=tz) for rng, other, expected in [(rng1, other1, expected1), (rng2, other2, expected2), (rng3, other3, expected3)]: result_union = rng.union(other) tm.assert_index_equal(result_union, expected)
Example #21
Source File: test_construction.py From recruit with Apache License 2.0 | 5 votes |
def test_verify_integrity_deprecated(self): # GH#23919 with tm.assert_produces_warning(FutureWarning): DatetimeIndex(['1/1/2000'], verify_integrity=False)
Example #22
Source File: test_indexing.py From recruit with Apache License 2.0 | 5 votes |
def test_getitem(self): idx1 = pd.date_range('2011-01-01', '2011-01-31', freq='D', name='idx') idx2 = pd.date_range('2011-01-01', '2011-01-31', freq='D', tz='Asia/Tokyo', name='idx') for idx in [idx1, idx2]: result = idx[0] assert result == Timestamp('2011-01-01', tz=idx.tz) result = idx[0:5] expected = pd.date_range('2011-01-01', '2011-01-05', freq='D', tz=idx.tz, name='idx') tm.assert_index_equal(result, expected) assert result.freq == expected.freq result = idx[0:10:2] expected = pd.date_range('2011-01-01', '2011-01-09', freq='2D', tz=idx.tz, name='idx') tm.assert_index_equal(result, expected) assert result.freq == expected.freq result = idx[-20:-5:3] expected = pd.date_range('2011-01-12', '2011-01-24', freq='3D', tz=idx.tz, name='idx') tm.assert_index_equal(result, expected) assert result.freq == expected.freq result = idx[4::-1] expected = DatetimeIndex(['2011-01-05', '2011-01-04', '2011-01-03', '2011-01-02', '2011-01-01'], freq='-1D', tz=idx.tz, name='idx') tm.assert_index_equal(result, expected) assert result.freq == expected.freq
Example #23
Source File: test_indexing.py From recruit with Apache License 2.0 | 5 votes |
def test_reasonable_key_error(self): # GH#1062 index = DatetimeIndex(['1/3/2000']) with pytest.raises(KeyError, match='2000'): index.get_loc('1/1/2000')
Example #24
Source File: test_setops.py From recruit with Apache License 2.0 | 5 votes |
def test_outer_join(self): # should just behave as union # overlapping left = self.rng[:10] right = self.rng[5:10] the_join = left.join(right, how='outer') assert isinstance(the_join, DatetimeIndex) # non-overlapping, gap in middle left = self.rng[:5] right = self.rng[10:] the_join = left.join(right, how='outer') assert isinstance(the_join, DatetimeIndex) assert the_join.freq is None # non-overlapping, no gap left = self.rng[:5] right = self.rng[5:10] the_join = left.join(right, how='outer') assert isinstance(the_join, DatetimeIndex) # overlapping, but different offset rng = date_range(START, END, freq=BMonthEnd()) the_join = self.rng.join(rng, how='outer') assert isinstance(the_join, DatetimeIndex) assert the_join.freq is None
Example #25
Source File: test_setops.py From recruit with Apache License 2.0 | 5 votes |
def test_union(self): # overlapping left = self.rng[:10] right = self.rng[5:10] the_union = left.union(right) assert isinstance(the_union, DatetimeIndex) # non-overlapping, gap in middle left = self.rng[:5] right = self.rng[10:] the_union = left.union(right) assert isinstance(the_union, Index) # non-overlapping, no gap left = self.rng[:5] right = self.rng[5:10] the_union = left.union(right) assert isinstance(the_union, DatetimeIndex) # order does not matter tm.assert_index_equal(right.union(left), the_union) # overlapping, but different offset rng = date_range(START, END, freq=BMonthEnd()) the_union = self.rng.union(rng) assert isinstance(the_union, DatetimeIndex)
Example #26
Source File: test_setops.py From recruit with Apache License 2.0 | 5 votes |
def test_union(self): # overlapping left = self.rng[:10] right = self.rng[5:10] the_union = left.union(right) assert isinstance(the_union, DatetimeIndex) # non-overlapping, gap in middle left = self.rng[:5] right = self.rng[10:] the_union = left.union(right) assert isinstance(the_union, Index) # non-overlapping, no gap left = self.rng[:5] right = self.rng[5:10] the_union = left.union(right) assert isinstance(the_union, DatetimeIndex) # order does not matter tm.assert_index_equal(right.union(left), the_union) # overlapping, but different offset rng = date_range(START, END, freq=BMonthEnd()) the_union = self.rng.union(rng) assert isinstance(the_union, DatetimeIndex)
Example #27
Source File: test_setops.py From recruit with Apache License 2.0 | 5 votes |
def test_datetimeindex_union_join_empty(self): dti = date_range(start='1/1/2001', end='2/1/2001', freq='D') empty = Index([]) result = dti.union(empty) assert isinstance(result, DatetimeIndex) assert result is result result = dti.join(empty) assert isinstance(result, DatetimeIndex)
Example #28
Source File: test_setops.py From recruit with Apache License 2.0 | 5 votes |
def test_difference_freq(self, sort): # GH14323: difference of DatetimeIndex should not preserve frequency index = date_range("20160920", "20160925", freq="D") other = date_range("20160921", "20160924", freq="D") expected = DatetimeIndex(["20160920", "20160925"], freq=None) idx_diff = index.difference(other, sort) tm.assert_index_equal(idx_diff, expected) tm.assert_attr_equal('freq', idx_diff, expected) other = date_range("20160922", "20160925", freq="D") idx_diff = index.difference(other, sort) expected = DatetimeIndex(["20160920", "20160921"], freq=None) tm.assert_index_equal(idx_diff, expected) tm.assert_attr_equal('freq', idx_diff, expected)
Example #29
Source File: test_setops.py From recruit with Apache License 2.0 | 5 votes |
def test_union_bug_1745(self): left = DatetimeIndex(['2012-05-11 15:19:49.695000']) right = DatetimeIndex(['2012-05-29 13:04:21.322000', '2012-05-11 15:27:24.873000', '2012-05-11 15:31:05.350000']) result = left.union(right) exp = DatetimeIndex(sorted(set(list(left)) | set(list(right)))) tm.assert_index_equal(result, exp)
Example #30
Source File: test_setops.py From recruit with Apache License 2.0 | 5 votes |
def test_union_bug_1730(self): rng_a = date_range('1/1/2012', periods=4, freq='3H') rng_b = date_range('1/1/2012', periods=4, freq='4H') result = rng_a.union(rng_b) exp = DatetimeIndex(sorted(set(list(rng_a)) | set(list(rng_b)))) tm.assert_index_equal(result, exp)