3 回答
TA贡献1886条经验 获得超2个赞
您可以使用xs:
In [11]: df.xs(2, level='B')
Out[11]:
Value
A
1 6.87
2 9.87
或者:
In [12]: df1.xs(1, level=1)
Out[12]:
Value
A
1 5.67
2 8.67
TA贡献1827条经验 获得超9个赞
作为一种替代方法,您可以使用df.loc:
>>> df.loc[(slice(None),2),:]
Value
A B
1 2 6.87
2 2 9.87
元组按顺序访问索引。因此,根据第二级索引slice(None)从index 'A',第二位置限制中获取所有值,'B'=2在本示例中为。在:指定要所有列,但你可以subet列有作为。
TA贡献1776条经验 获得超12个赞
如果只想返回横截面,请使用xs(如@Andy Hayden所述)。
但是,如果要覆盖原始数据框中的某些值,请改用pd.IndexSlice(with pd.loc)。给定一个数据框df:
In [73]: df
Out[73]:
col_1 col_2
index_1 index_2
1 1 5 6
1 5 6
2 5 6
2 2 5 6
如果您想用where的0所有元素覆盖col_1,index_2 == 2请执行以下操作:
In [75]: df.loc[pd.IndexSlice[:, 2], 'col_1'] = 0
In [76]: df
Out[76]:
col_1 col_2
index_1 index_2
1 1 5 6
1 5 6
2 0 6
2 2 0 6
添加回答
举报