为了账号安全,请及时绑定邮箱和手机立即绑定

Python Pandas从多索引数据框中的第二个索引访问值

Python Pandas从多索引数据框中的第二个索引访问值

慕桂英3389331 2021-03-18 17:09:33
我不确定多索引的工作原理,所以我可能只是在这里尝试做错事情。如果我有一个数据框        ValueA  B         1  1    5.671  2    6.871  3    7.232  1    8.672  2    9.872  3    10.23如果要访问B = 2的元素,该怎么做?df.ix [2]给我A = 2。要获得特定值,似乎是df.ix [(1,2)],但这是B索引的目的,如果您不能直接访问它的话?
查看完整描述

3 回答

?
MM们

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


查看完整回答
反对 回复 2021-03-26
?
素胚勾勒不出你

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列有作为。


查看完整回答
反对 回复 2021-03-26
?
叮当猫咪

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


查看完整回答
反对 回复 2021-03-26
  • 3 回答
  • 0 关注
  • 268 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信