Python 如何使用具有多重索引的奇特字符串日期索引

Python 如何使用具有多重索引的奇特字符串日期索引,python,pandas,dataframe,Python,Pandas,Dataframe,让我们假设我有以下数据帧 作为pd进口熊猫 df=pd.DataFrame{ id:[1,1,1], 日期:[2020-1-112020-1-420020-2-3], 值:[1,2,3] } df[date]=pd.to_datetimedf[date],格式=%Y-%m-%d 这是 id日期值 0 1 2020-01-01 1 1 1 2020-01-04 2 2 1 2020-02-03 3 现在,以date列作为索引,我可以这样索引一个月: df.

让我们假设我有以下数据帧

作为pd进口熊猫 df=pd.DataFrame{ id:[1,1,1], 日期:[2020-1-112020-1-420020-2-3], 值:[1,2,3] } df[date]=pd.to_datetimedf[date],格式=%Y-%m-%d 这是 id日期值 0 1 2020-01-01 1 1 1 2020-01-04 2 2 1 2020-02-03 3 现在,以date列作为索引,我可以这样索引一个月:

df.set_索引日期[2020-01] 输出: id值 日期 2020-01-01 1 1 2020-01-04 1 2 但是由于有多索引,我无法使用此功能。我试着使用如下切片:

df.set_索引[id,日期][:,2020-01] 这引起了一场争论

TypeError: '(slice(None, None, None), '2020-01')' is an invalid key
有没有干净的方法可以做到这一点?

这是可能的,但需要索引,因为DatetimeIndex处于第二级:

idx = pd.IndexSlice
print (df.set_index(["id", "date"]).loc[idx[:, '2020-01'], :])
               value
id date             
1  2020-01-01      1
   2020-01-04      2
如果DatetimeIndex位于第一级:

print (df.set_index(["date", "id"]).loc['2020-01'])
               value
date       id       
2020-01-01 1       1
2020-01-04 1       2
:

这是可能的,但需要索引,因为DatetimeIndex处于第二级:

idx = pd.IndexSlice
print (df.set_index(["id", "date"]).loc[idx[:, '2020-01'], :])
               value
id date             
1  2020-01-01      1
   2020-01-04      2
如果DatetimeIndex位于第一级:

print (df.set_index(["date", "id"]).loc['2020-01'])
               value
date       id       
2020-01-01 1       1
2020-01-04 1       2
:


要执行您试图执行的操作,一种方法是将axis参数指定为.loc,以解释在单个轴上传递的切片器

df.set_index(["id", "date"]).loc(axis=0)[:, "2020-01"]

要执行您试图执行的操作,一种方法是将axis参数指定为.loc,以解释在单个轴上传递的切片器

df.set_index(["id", "date"]).loc(axis=0)[:, "2020-01"]