我的数据包含多个区域的时间线值。我想按日期切片
这是我的MultIndex数据帧,我称之为Bob:
arrays = [[1,1,2,2],
['2020-01-06', '2020-01-13','2020-01-06', '2020-01-13']]
df = pd.DataFrame(np.transpose(arrays))
df[1] = pd.to_datetime(df[1])
index = pd.MultiIndex.from_frame(df, names=['zone', 'date'])
bob = pd.Series(np.random.randn(4), index=index)
print(bob)
zone date
1 2020-01-06 -0.513744
2020-01-13 1.367461
2 2020-01-06 0.209916
2020-01-13 0.397261
现在,我想从单个datetime索引中获取一个片段,并使用它来获取Bob的片段。 以下代码适用于Pandas 1.0.1(可能更早),但在1.1中中断
print(pd.__version__)
singleIndex = pd.to_datetime(pd.Index(['2020-01-06', '2020-01-13']))
dateSlice = singleIndex[1:]
print(dateSlice)
idx = pd.IndexSlice
print(bob.loc[idx[:,dateSlice]])
1.0.1
DatetimeIndex(['2020-01-13'], dtype='datetime64[ns]', freq=None)
zone date
1 2020-01-13 1.367461
2 2020-01-13 0.397261
dtype: float64
在1.1.0中
1.1.0
DatetimeIndex(['2020-01-13'], dtype='datetime64[ns]', freq=None)
Traceback (most recent call last):
File "try.py", line 18, in <module>
print(bob.loc[idx[:,dateSlice]])
File "/home/mix/.conda/envs/covidpro/lib/python3.6/site-packages/pandas/core/indexing.py", line 873, in __getitem__
return self._getitem_tuple(key)
File "/home/mix/.conda/envs/covidpro/lib/python3.6/site-packages/pandas/core/indexing.py", line 1044, in _getitem_tuple
return self._getitem_lowerdim(tup)
File "/home/mix/.conda/envs/covidpro/lib/python3.6/site-packages/pandas/core/indexing.py", line 766, in _getitem_lowerdim
return self._getitem_nested_tuple(tup)
File "/home/mix/.conda/envs/covidpro/lib/python3.6/site-packages/pandas/core/indexing.py", line 826, in _getitem_nested_tuple
result = self._handle_lowerdim_multi_index_axis0(tup)
File "/home/mix/.conda/envs/covidpro/lib/python3.6/site-packages/pandas/core/indexing.py", line 1066, in _handle_lowerdim_multi_index_axis0
return self._get_label(tup, axis=axis)
File "/home/mix/.conda/envs/covidpro/lib/python3.6/site-packages/pandas/core/indexing.py", line 1059, in _get_label
return self.obj.xs(label, axis=axis)
File "/home/mix/.conda/envs/covidpro/lib/python3.6/site-packages/pandas/core/generic.py", line 3480, in xs
loc, new_index = self.index.get_loc_level(key, drop_level=drop_level)
File "/home/mix/.conda/envs/covidpro/lib/python3.6/site-packages/pandas/core/indexes/multi.py", line 2858, in get_loc_level
k = self._get_level_indexer(k, level=i)
File "/home/mix/.conda/envs/covidpro/lib/python3.6/site-packages/pandas/core/indexes/multi.py", line 2965, in _get_level_indexer
code = self._get_loc_single_level_index(level_index, key)
File "/home/mix/.conda/envs/covidpro/lib/python3.6/site-packages/pandas/core/indexes/multi.py", line 2634, in _get_loc_single_level_index
return level_index.get_loc(key)
File "/home/mix/.conda/envs/covidpro/lib/python3.6/site-packages/pandas/core/indexes/datetimes.py", line 586, in get_loc
raise InvalidIndexError(key)
pandas.errors.InvalidIndexError: DatetimeIndex(['2020-01-13'], dtype='datetime64[ns]', freq=None)
我承认多重索引让我很困惑。如何在新熊猫身上正确地进行切片
它似乎不再受支持,您可以在^{} 中使用带有^{} 和^{} 的替换项:
对于一个字符串值,它的工作方式有点不同:
相关问题 更多 >
编程相关推荐