參考:
https://stackoverflow.com/questions/23296282還有這個:
https://bit.ly/2Edy74i簡單來說, `df.loc["Store 1"]["Cost"]` 會透過 2 次__getitem__ 來取值,後面行為的開始執行時取決於前面行為的完成時機。若資料可以允許寫成 `df.loc[:, ('Store 1', 'cost')]`則 pandas 可以一次根據後面的參數取值,相對來說較快關於回傳值是 view 還是 copy ,基本上可以照著stackoverflow 那篇回答的規則去判斷。要了解的更詳細的話,推薦你直接去追 source code:pd.DataFrame.__getitem__ :
https://git.io/fpPuH裡面有寫到好幾種狀況,比較值得注意的地方有self._slice (generic._slice):
https://git.io/fpPzxself._take (generic._take):
https://git.io/fpP2E修正一下:上面的 generic 應該是 generic.NDFrame所以說,用 chain indexing 問題在於一般情況下不容易判斷出取的值到底是 view 還是 copy (不了解如stackoverflow 那篇回答所說的規則),而非資料在記憶體中的情況差異所影響。而因為會影響取值結果是 view/copy 的情況很多種,所以官方還是建議少用 chain indexing。