索引多级索引数据帧


mydf = pd.DataFrame({'dts':['1/1/2000','1/1/2000','1/1/2000','1/2/2000', '1/3/2000', '1/3/2000'],
'product':['A', 'B', 'A','A', 'A','B'],
'value':[1,2,2,3,6,1]})
a =mydf.groupby(['dts','product']).sum()
a
Out[1]: 
value
dts      product       
1/1/2000 A            3
B            2
1/2/2000 A            3
1/3/2000 A            6
B            1

CCD_ 1给出第一行。

a.loc[('1/1/2000','A'),]
Out[2]: 
value    3
Name: (1/1/2000, A), dtype: int64

但是为什么CCD_ 2也给出B的第二行呢?唯一的区别是括号

a.loc[['1/1/2000','A'],]
Out[3]: 
value
dts      product       
1/1/2000 A            3
B            2

用完全不同的东西替换"A":

a.loc[['1/1/2000','XYZZZ'],]
value
dts      product       
1/1/2000 A            3
B            2

现在,使用元组重复此操作:

a.loc[('1/1/2000','XYZZZ'),]

这就是你得到的:

KeyError: ('1/1/2000', 'XYZZZ')

当指定为列表时,Panda将尝试仅在第一级进行索引。"1/1/2000"出现在第一级中,并返回与之相关的所有记录。

当被指定为元组时,它假定所有级别的元组值,当它找不到它时,会引发KeyError。当它找到它时,只返回该行。

最新更新