簡體   English   中英

Python Pandas 從多索引數據幀中的第二個索引訪問值

[英]Python Pandas Accessing values from second index in multi-indexed dataframe

我不太確定多索引是如何工作的,所以我可能只是試圖在這里做錯事。 如果我有一個數據框

        Value
A  B         
1  1    5.67
1  2    6.87
1  3    7.23
2  1    8.67
2  2    9.87
2  3    10.23

如果我想訪問 B=2 的元素,我該怎么做? df.ix[2] 給了我 A=2。 要獲得特定值似乎是 df.ix[(1,2)] 但如果您不能直接訪問它,這就是 B 索引的目的?

您可以使用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

作為替代方案,您可以使用df.loc

>>> df.loc[(slice(None),2),:]
     Value
A B       
1 2   6.87
2 2   9.87

元組按順序訪問索引。 因此, slice(None)從索引'A'所有值,第二個位置限制基於第二級索引,在此示例中'B'=2 :指定您想要所有列,但您也可以對那里的列進行子集。

如果您只想返回橫截面,請使用xs (如@Andy Hayden 所述)。

但是,如果您想覆蓋原始數據pd.IndexSlice某些值,請改用pd.IndexSlice (使用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

如果你想用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM