索引MultiIndex-ed DataFrame時,看起來.iloc
假設您引用索引的「內部級別」,而.loc
查看外部級別。帶MultiIndex'd DataFrame的`.loc`和`.iloc`
例如:
np.random.seed(123)
iterables = [['bar', 'baz', 'foo', 'qux'], ['one', 'two']]
idx = pd.MultiIndex.from_product(iterables, names=['first', 'second'])
df = pd.DataFrame(np.random.randn(8, 4), index=idx)
# .loc looks at the outer index:
print(df.loc['qux'])
# df.loc['two'] would throw KeyError
0 1 2 3
second
one -1.25388 -0.63775 0.90711 -1.42868
two -0.14007 -0.86175 -0.25562 -2.79859
# while .iloc looks at the inner index:
print(df.iloc[-1])
0 -0.14007
1 -0.86175
2 -0.25562
3 -2.79859
Name: (qux, two), dtype: float64
兩個問題:
首先,這是爲什麼?這是故意的設計決定嗎?
其次,我可以用.iloc
來引用索引的外層,以產生下面的結果嗎?我知道我可以先找到get_level_values
,然後.loc
索引的最後一個成員,但是如果它可以更直接地完成,可以使用時髦的.iloc
語法或專爲該案例設計的一些現有函數來找到索引的最後一個成員。
# df.iloc[-1]
qux one 0.89071 1.75489 1.49564 1.06939
two -0.77271 0.79486 0.31427 -1.32627
該索引是一個模擬到表中的線性列表。你會發現在第二個例子中,索引'-1'實際上由_two_值組成:'Name:(qux,two)'。 'loc'允許引用一個完整的索引(例如'df.loc ['qux','two']')或部分索引,但它是有序的。你可以做一個'reset_index',並按照其他順序設置索引。 –