访问多索引DataFrame的行

时间:2016-03-31 01:01:44

标签: python pandas multi-index

给定一个多索引DataFrame:

df = pd.DataFrame({'Last Name' :  ['Deere','Deere','Foo'   ,'Foo'  ,'Man'   ],
                   'Middle Name': ['Goat' ,'Lamb' ,'Man'   ,'Man'  ,'Date'  ],
                   'First Name':  ['John' ,'Jane' ,'Group' ,'Alone','Karate'],
                   'Value1':      [ 1     , 2     , 3      , 4     , 5      ],
                   'Value2':      ['Green','Blue' ,'Yellow','Black','Purple']})

df.set_index(['Last Name','Middle Name','First Name'],inplace=True)

看起来像:

                                       Value1     Value2
Last Name   Middle Name   First Name
Deere       Goat          John         1          Green
            Lamb          Jane         2          Blue
Foo         Man           Group        3          Yellow
                          Alone        4          Black
Man         Date          Karate       5          Purple

我想访问一个特定的行,使用以下内容:

df.loc['Foo','Man','Alone']

并让该命令返回类似于:

的系列
Value1        4
Value2    Black
name: ('Last Name','Middle Name','First Name'), dtype: object

1 个答案:

答案 0 :(得分:0)

您的第一种方法可以正常使用:

s =  df.loc['Foo', 'Man', 'Alone']
>>> s
Value1        4
Value2    Black
Name: (Foo, Man, Alone), dtype: object

唯一的区别是,您似乎想要重命名该系列。

s.name = tuple(df.index.names)

>>> s
Value1        4
Value2    Black
Name: (Last Name, Middle Name, First Name), dtype: object

请注意,如果使用双括号,则会返回数据帧而不是系列。

>>> df.loc[[('Foo', 'Man', 'Alone')]]
                                  Value1 Value2
Last Name Middle Name First Name               
Foo       Man         Alone            4  Black